Android 4.0 Api禁用Apk

Android 4.0 Api禁用Apk,android,Android,我在一家OEM公司工作,想知道如何停用“禁用选项”,以便我们的设备用户无法删除预加载的应用程序,这是一个安全应用程序。SDK 4.0中是否有AndroidManifest属性。如果是,请告诉我。 多谢各位 SDK中没有关于此的内容。但是,用户无法卸载安装在固件中的应用程序,除非他们在其设备上设置根目录。不,没有办法阻止用户禁用预安装的应用程序,这在很大程度上是出于设计。其原理是,如果禁用应用程序不会阻止用户访问设置并重新启用它,则应允许用户禁用它。我检查了包含以下功能的 SUPPORT\u DI

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

SDK中没有关于此的内容。但是,用户无法卸载安装在固件中的应用程序,除非他们在其设备上设置根目录。

不,没有办法阻止用户禁用预安装的应用程序,这在很大程度上是出于设计。其原理是,如果禁用应用程序不会阻止用户访问设置并重新启用它,则应允许用户禁用它。

我检查了包含以下功能的

SUPPORT\u DISABLE\u APPS
是一个系统范围的标志。如果要防止任何(!)应用被禁用,可以将此标志设置为
false

简言之,评论告诉了一切:唯一不能禁用的应用是:

  • (主屏幕-)启动器。通过使用action
    action\u MAIN
    和category
    category\u 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);
                }
    
    if(支持\禁用\应用程序){
    试一试{
    //尽量防止用户用砖块砸他们的手机
    //通过不允许禁用与签名的应用
    //系统证书和系统中的任何启动器应用程序。
    PackageInfo sys=mPm.getPackageInfo(“android”,
    PackageManager.GET_签名);
    意向意向=新意向(意向.行动\主要);
    intent.addCategory(intent.CATEGORY_HOME);
    setPackage(mAppEntry.info.packageName);
    List homes=mPm.querytentActivities(intent,0);
    if((homes!=null&&homes.size()>0)||
    (mPackageInfo!=null&&mPackageInfo.signatures!=null&&
    sys.signatures[0].equals(mPackageInfo.signatures[0])){
    //禁用核心系统应用程序的按钮。
    mUninstallButton.setText(R.string.disable_text);
    }else if(mAppEntry.info.enabled){
    mUninstallButton.setText(R.string.disable_text);
    启用=真;
    }否则{
    mUninstallButton.setText(R.string.enable_text);
    启用=真;
    }
    }捕获(PackageManager.NameNotFounde异常){
    Log.w(标签“无法获取包裹信息”,e);
    }
    

但在Android 4.0上,某些内置应用程序可以禁用(例如浏览器),而其他应用程序不能禁用(例如设置应用程序)。disabled!=卸载!问题是:如果您可以修改系统映像(如问题的作者!),如何防止禁用某些系统应用程序(例如,请参阅“设置”),因此必须有某种方法来防止禁用应用程序,很可能只有系统应用程序!正如我所说,“如果禁用应用程序不会阻止用户访问设置并重新启用它,那么应该允许他们禁用它。”如果允许禁用设置应用程序,则很难取消禁用该应用程序。:)