我收到消息由于校验和错误,无法使用管理应用程序.使用下面的代码时,请联系您的IT部门.基本上你有两个
Android Lollipop设备.一个设备未设置(出厂设置),另一个设备上有该编程应用程序.编程应用程序向未配置的设备发送NFC命令,以使用您传递给它的数据来告知它启动配置.根据DevicePolicyManager.
MIME_TYPE_PROVISIONING_NFC,需要三个字段(APK位置,APK文件校验和和包名称).
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); } } }
注意:这是使用最新的Android L Developer Preview.我猜这个功能完全是可能的.
更新:实际释放也是这样.
APK:https://storage.googleapis.com/randy/DeviceOwnerCheck.apk
校验和:FRaAsqdPSjp9nC5hKIU / ElPv e4
结果:使用此URL和此校验和会给出错误,甚至不能访问加密设备屏幕.
我还发布了两个应用程序到GitHub.一个发送NFC数据提供.另一个只是一个应用程序来检查应用程序是设备管理员还是设备所有者.希望有人认为这是有用的.如果您想自己构建DeviceOwnerCheck,则需要修改URL和校验和.
解决方法
哈希码必须是url的安全.这将转换和删除拖尾填充
$cat Something.apk | openssl dgst -binary -sha1 | openssl base64 | tr '+/' '-_' | tr -d '='