【问题标题】:Android 4.0 Api to Disable ApkAndroid 4.0 Api 禁用 Apk
【发布时间】:2012-05-15 17:50:47
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    【讨论】:

    • 好吧,有些系统应用程序不能被禁用(例如,参见“设置”),所以必须有一些方法来防止应用程序被禁用,很可能只有系统应用程序!
    • 正如我所说,“这样做的理念是,如果禁用应用程序不会阻止用户进入设置并重新启用它,那么他们应该被允许禁用它。 "允许禁用“设置”应用程序将很难取消禁用它。 :)
    【解决方案2】:

    我检查了包含以下功能的sourcecode of the Settings app

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

    简而言之,评论说明了一切:唯一不能禁用的应用是:

    • (主屏幕-)启动器。这些是通过实现具有动作ACTION_MAIN 和类别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);
                  }
      

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 但是在 Android 4.0 上,一些内置应用程序可以被禁用(例如浏览器),其他的则不能(例如设置应用程序)。已禁用!=已卸载!问题是:如果您可以修改系统映像,如何防止禁用(就像问题的作者一样!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 2014-01-09
      • 2013-02-09
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多