Ran*_*ndy 12 android nfc android-5.0-lollipop
我Couldn't use the admin app due to a checksum error. Contact your IT department
在使用下面的代码时收到消息.基本上你有两个Android Lollipop设备.一个设备未设置(恢复出厂设置),另一个设备上有此编程应用程序.编程应用程序向未设置的设备发送NFC命令,告诉它使用您传递给它的数据开始配置.根据DevicePolicyManager,需要三个字段(APK位置,APK文件校验和和包名称).MIME_TYPE_PROVISIONING_NFC.
APK正在下载.我正在检查我的服务器日志,它显然来自设备(AndroidDownloadManager
在用户代理中).
根据DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM它是文件的SHA-1校验和.校验和不匹配.我已经尝试了许多不同格式的校验和(十六进制,带有空格的十六进制,大写/小写,base64,文本),我想我可能错过了一个测试.
不幸的是,Android Lollipop源代码尚不可用,否则我会在那里查看.
我该如何解决?有什么想法吗?
public class ProvisionerActivity extends Activity implements CreateNdefMessageCallback {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcAdapter.setNdefPushMessageCallback(this, this);
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
try {
Properties p = new Properties();
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.example.deviceownertest");
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, "http://example.com/DeviceOwnerTest.apk");
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, "19138948d8a607617971af724ffd08dd7eab771b");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream out = new ObjectOutputStream(bos);
p.store(out, "");
byte[] bytes = bos.toByteArray();
NdefMessage msg = new NdefMessage(NdefRecord.createMime(DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, bytes));
return msg;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这是使用最新的Android L开发人员预览版.我想完全有可能这个功能还没有完成.
更新:实际版本也是这样做的.
APK: https
: //storage.googleapis.com/randy/DeviceOwnerCheck.apk 校验和: FRaAsqdPSjp9nC5hKIU/ElPv + e4
结果:使用此URL和此校验和会出错,甚至无法进入加密设备屏幕.
我还向GitHub发布了两个应用程序.一个人发送NFC数据.另一个只是一个应用程序来检查应用程序是设备管理员还是设备所有者.希望有人发现这很有用.如果要自己构建DeviceOwnerCheck,则需要修改URL和校验和.
小智 17
哈希码必须是url安全的.这会转换并删除尾随填充
$ cat Something.apk | openssl dgst -binary -sha1 | openssl base64 | tr '+/' '-_' | tr -d '='
Run Code Online (Sandbox Code Playgroud)
小智 6
它似乎不喜欢校验和中的特殊字符.我能够使用我的apk文件,但校验和没有任何特殊字符.当我尝试使用你的apk文件时,我得到了同样的错误.尝试重新创建apk,直到它没有特殊字符,然后它应该工作.
我猜测有一些特殊字符丢失了.
归档时间: |
|
查看次数: |
3632 次 |
最近记录: |