2

我在 OEM 工作,想知道如何停用“禁用选项”,以便我们的设备用户无法删除预加载的应用程序,这是一个安全应用程序。SDK 4.0 中是否有 AndroidManifest 属性。如果是这样,请告诉我。非常感谢。

4

3 回答 3

4

不,没有办法阻止用户禁用预安装的应用程序,这在很大程度上是设计使然。这样做的理念是,如果禁用应用程序不会阻止用户进入设置并重新启用它,那么他们应该被允许禁用它。

于 2012-05-14T23:30:18.960 回答
2

我检查了包含以下功能的设置应用程序的源代码。

SUPPORT_DISABLE_APPS是一个系统范围的标志。如果您想防止任何(!)应用程序被禁用,您可以将此标志设置为false.

简而言之,评论说明了一切:唯一无法禁用的应用程序是:

  • (主屏幕-)发射器。这些是通过实现带有 actionACTION_MAIN和 category的 Intent 来识别的CATEGORY_HOME
  • 使用系统证书签名的应用程序。由于您可以在系统映像的构建过程中修改和创建此证书,因此应该可以使用此密钥对您的应用程序进行签名,从而防止禁用。

            if (SUPPORT_DISABLE_APPS) {
                try {
                    // Try to prevent the user from bricking their phone
                    // by not allowing disabling of apps signed with the
                    // system cert and any launcher app in the system.
                    PackageInfo sys = mPm.getPackageInfo("android",
                            PackageManager.GET_SIGNATURES);
                    Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_HOME);
                    intent.setPackage(mAppEntry.info.packageName);
                    List<ResolveInfo> homes = mPm.queryIntentActivities(intent, 0);
                    if ((homes != null && homes.size() > 0) ||
                            (mPackageInfo != null && mPackageInfo.signatures != null &&
                                    sys.signatures[0].equals(mPackageInfo.signatures[0]))) {
                        // Disable button for core system applications.
                        mUninstallButton.setText(R.string.disable_text);
                    } else if (mAppEntry.info.enabled) {
                        mUninstallButton.setText(R.string.disable_text);
                        enabled = true;
                    } else {
                        mUninstallButton.setText(R.string.enable_text);
                        enabled = true;
                    }
                } catch (PackageManager.NameNotFoundException e) {
                    Log.w(TAG, "Unable to get package info", e);
                }
    
于 2012-05-15T09:50:47.530 回答
0

SDK 中对此没有任何内容。但是,用户无法卸载您放入固件中的应用程序,除非他们根植他们的设备。

于 2012-05-14T23:09:21.743 回答