Я создал приложение владельца устройства, но мне не удается установить его на реальном устройстве. Я использую метод QR-кода, указанный здесь .
Текст, который я использую для создания своего QR-кода:
{
"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": {
}
}
Я генерирую свой apk из Android studio, выполнив следующие действия: Build -> Generate Signed Apk-> Create a new keystore -> Ok -> Next-> Select «Release» -> Build. Затем я создаю контрольную сумму пакета, используя
cat /mnt/c/Users/Antarpuneet/app-release.apk | openssl dgst -binary -sha256 | openssl base64 | tr '+ /' '-_' | tr -d '='
После сброса настроек к заводским настройкам, 6-кратное нажатие на экране приветствия открывает приложение для чтения QR-кодов, я сканирую код, а затем попадаю на экран подключения к WIFI. успешно подключиться к Inte rnet. В нем написано «Настройка устройства» ... но возвращается сообщение об ошибке Не удается настроить устройство. Не удалось установить приложение администратора. Это мой класс DevAdminReceiver: -
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)
}
}
}
My Main Действие: -
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)
}
}
На данный момент приложение мало что делает и только выдает всплывающее сообщение Да или Нет в зависимости от того, предоставлены ли приложению права владельца устройства. или нет.
Мой файл манифеста: -
<?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: -
<?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>
То, что я уже пробовал:
- Установка приложения на эмулятор с помощью команды оболочки adb
оболочка adb dpm set-device-owner com.example.killapplication / .DevAdminReceiver
Приложение успешно назначается владельцем устройства.
Установка приложения на реальное устройство (после сброса настроек и пропуска страницы входа) с помощью приведенной выше команды adb. Он успешно устанавливает приложение в качестве владельца устройства. Я думаю, это означает, что проблема связана с QR-кодом
. 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" не принимает ссылки на диски Google (или длинные ссылки), и мое приложение даже не загружалось. Итак, я разместил свое приложение на бесплатном веб-сайте хостинга файлов, и теперь оно загружается (я могу подтвердить с этого веб-сайта) .. Кроме того, нет проблем с контрольной суммой, потому что я пытался указать неправильные, и оно вернулось с ошибка контрольной суммы. Теперь мое приложение загружается, но при установке оно говорит Заблокировано Play Protect , и когда я нажимаю Все равно установить , оно возвращается со старой ошибкой: Не удается настроить устройство - не удалось установить приложение администратора