gpt4 book ai didi

android - 仅允许选定的应用程序在 Android 中进行旁加载

转载 作者:行者123 更新时间:2023-11-29 02:21:32 25 4
gpt4 key购买 nike

我正在尝试为媒体设备定制 Android。我们从制造商那里获得了固件,它基于 Android 7 并稍作修改。

我们想做的一件事是将设备上的应用程序安装限制为仅限某些应用程序。我们不会在设备上安装任何应用商店,例如 Google Play。我们将构建固件并将所有应用程序安装到我们车间的设备上,然后交付给客户。将来,我们可能希望通过 OTA 或某些机制在设备上安装更多应用。

我们希望禁止客户通过 USB 端口旁加载其他应用。我们创建了一个文件(例如,whitelisted_apps.txt),其中包含所有已批准应用程序名称的列表,例如 -

com.mycompany.android.app1
com.mycompany.android.app2
com.ourpartner.android.appx

我们调整了 AOSP 的 PackageInstaller 应用程序,当通过文件浏览器打开 *.APK 文件并调用 PackageInstallerActivity.java 中的方法时,它会将要安装的应用程序的名称与 whitelisted_apps 中的名称进行比较.txt,如果找不到该名称,则禁止安装新应用程序。它正在工作。

现在,我们想进一步改进它,因为 whitelisted_apps.txt 可以被操纵。有些人建议使用 sqlite 来保存列表。我们不确定这是否是最佳解决方案。

有人建议使用证书和签名,我们认为这是比其他解决方案更好的解决方案。我们将使用我们的 key 签署我们想要在设备上安装的所有应用程序。当 *.APK 文件被旁加载时,PackageInstaller 将获得 APK 的签名并与我们的签名进行比较。如果它们匹配,则可以旁加载该应用。

我们关注了这个优秀的资源:SignatureCheck.java。它使用硬编码的 APP_SIGNATURE。我们目前有这个:

public boolean validateAppSignature() throws NameNotFoundException {
boolean sigMatch = false;
String APP_SIGNATURE = "123456784658923C4192E61B16999";
PackageInfo packageInfo3 = mPm.getPackageInfo(
getPackageName(), PackageManager.GET_SIGNATURES);

try {
for (Signature signature : packageInfo3.signatures) {
// SHA1 the signature
String sha1 = getSHA1(signature.toByteArray());
Log.i(TAG, "got this SHA1 of the signature ... "+sha1);
// check if it matches hardcoded value
sigMatch = APP_SIGNATURE.equals(sha1);
if (sigMatch){
return sigMatch;
}
}
} catch (Exception e) {
e.printStackTrace();
}

return false;
}

只是我们不知道如何在现实世界中做到这一点。当我们构建、安装应用程序或使用 OTA 发布时,我们使用我们的私钥对这些应用程序进行签名,然后在设备(PackageInstaller 应用程序)上,我们将证书的 SHA1 签名硬编码为 APP_SIGNATURE,以便我们进行比较?还有其他想法吗?

非常感谢。

最佳答案

您似乎过于努力地尝试部分关闭旁加载。使用 Device Owner 完全关闭安装,只预加载你想要的应用程序。或者让唯一可以安装的应用程序是您自己的下载器,它只查看您的服务器。

关于android - 仅允许选定的应用程序在 Android 中进行旁加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55293205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com