首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“无法安装设备-无法安装管理应用程序”-- QR代码配置设备所有者应用程序时出错

“无法安装设备-无法安装管理应用程序”-- QR代码配置设备所有者应用程序时出错
EN

Stack Overflow用户
提问于 2020-08-04 07:18:38
回答 1查看 2.5K关注 0票数 2

我已经创建了一个设备所有者应用程序,但我在一个真正的设备上安装它有困难。我正在使用给定这里的QR代码方法。

用于创建QR代码的文本是

代码语言:javascript
复制
{

"android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME":
"com.example.killapplication/com.example.killapplication.DevAdminReceiver",

"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM":
"JdySYN-hMYsxWKagMxbk5q8Giu4lCCsUpQayMMKpwK0",

"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION":
"https://drive.google.com/u/0/uc?id=13O35_iCUcHVqNcuOvnRM5-sc8G586Xgf&export=download",
   
"android.app.extra.PROVISIONING_TIME_ZONE":
"America/Los_Angeles",

"android.app.extra.PROVISIONING_SKIP_ENCRYPTION": false,

"android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": {
}

}

通过这样做,我从Android生成了我的apk :构建->、生成签名的Apk->创建一个新的keystore -> Ok -> Next-> SelectRelease-> Build。然后使用以下方法创建包校验和

cat /mnt/c/Users/Antarpuneet/app-Relase.apk\ openssl -binary -sha256 base64 openssl '+/‘’_ tr -d '=‘

在做了工厂复位,点击6次欢迎屏幕打开一个QR阅读器应用程序,我扫描代码,然后它带我到WIFI连接屏幕,我成功地连接到互联网。上面说设置设备..。但返回的错误无法安装设备-无法安装管理应用程序。,这是我的DevAdminReceiver类:-

代码语言:javascript
复制
package com.example.killapplication

import android.app.admin.DeviceAdminReceiver
import android.content.ComponentName
import android.content.ContentValues.TAG
import android.content.Context
import android.content.Intent
import android.util.Log
import android.widget.Toast

class DevAdminReceiver: DeviceAdminReceiver() {

    override fun onEnabled(context: Context?, intent: Intent?) {
        super.onEnabled(context, intent)
        Log.d(TAG, "Device Owner Enabled")
        Toast.makeText(context, "Device Owner Enabled", Toast.LENGTH_SHORT).show();
    }


   companion object {
        fun getComponentName(context: Context): ComponentName {

            return ComponentName(context.applicationContext, DevAdminReceiver::class.java)
        }
    }


}

我的主要活动:-

代码语言:javascript
复制
package com.example.killapplication

import android.Manifest
import android.app.admin.DevicePolicyManager
import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {
    var button: Button? = null
    private lateinit var mAdminComponentName: ComponentName


    fun onClick(view: View?) {

        mAdminComponentName = DevAdminReceiver.getComponentName(this)
        val devicePolicyManager = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

        if (devicePolicyManager.isDeviceOwnerApp("com.example.killapplication")) {
            Toast.makeText(this, "YES", Toast.LENGTH_SHORT).show()
            Log.i("Status", "Yes")
        } else {
            Toast.makeText(this, "NO", Toast.LENGTH_SHORT).show()
            Log.i("Status", "No")
        }

        //devicePolicyManager.reboot( mAdminComponentName)
    }



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

    }
}

目前,该应用程序并没有做什么,只是祝酒词“是”还是“否”,这取决于设备所有者权限是否已授予该应用程序。

我的申报文件:-

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.killapplication">


    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <permission android:name="android.permission.REBOOT"/>

    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />



    <application
        android:allowBackup="true"
        android:sharedUserId="android.uid.system"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:testOnly="true">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:name=".DevAdminReceiver"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>

            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />
        </receiver>
    </application>

</manifest>

device_admin.xml :-

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
        <disable-keyguard-features />
    </uses-policies>
</device-admin>

我已经尝试过的是:

  1. 使用亚行shell命令在仿真程序上安装应用程序

adb shell dpm set-设备所有者com.example.kit应用程序/..DevAdminReceiver

它成功地将应用程序设置为设备所有者。

  1. 使用上面的adb命令在真正的设备上安装应用程序(在工厂重置并跳过页面中的标志之后)。它成功地将应用程序设置为设备所有者。我认为这意味着问题在于QR-Code.

3.使用: android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM而不是android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM,它返回相同的错误。

我正在尝试将它安装在带有Android版本9的设备上。

更新:我发现"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION“不接受谷歌驱动链接(或长链接),我的应用程序甚至没有被下载。所以,我现在把我的应用程序托管在一个免费的文件托管网站上,现在它正在被下载(我可以从那个网站确认)..Also,没有问题的校验和,因为我尝试给它错误的,它返回了一个校验和错误。现在,我的应用程序正在下载,但是在安装时,它说被Play 阻止了,而且当我点击安装时,它会返回旧的错误:无法设置设备-无法安装管理应用

EN

回答 1

Stack Overflow用户

发布于 2020-08-11 17:08:32

经过大量的工厂重置后,我能够解决我的问题。首先,确保您在QR代码中提供到此属性"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION“的链接。

不应该是谷歌的驱动器链接。为了进行测试,你可以在一个免费网站上托管你的应用程序,给你一个简短的链接。

完成此操作后,我的应用程序已成功下载,但仍未能安装。我发现了这个问题,这就是我的报表中的android:testOnly="true"属性。我将其设置为false,它正常工作。不过,奇怪的是,我所读的所有帮助我创建这个设备所有者应用程序的博客都明确要求这个属性为真。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63241934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档