android app无法运行 Android怎样让APP无法在指定的系统版本上运行(实现方法)

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

android app无法运行 Android怎样让APP无法在指定的系统版本上运行(实现方法)

snowyeti   2021-02-04 我要评论
想了解Android怎样让APP无法在指定的系统版本上运行(实现方法)的相关内容吗,snowyeti在本文为您仔细讲解android app无法运行的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:android,app无法运行,android,app,系统版本无法运行,下面大家一起来学习吧。

随着市面上越来越多三方APP的出现,某些手机厂商也开始对这些APP进行了安装限制或者运行限制,或者三方APP自身的版本过低,无法被特定的系统版本所支持。

今天我将要模拟实现一个“由于APP自身版本过低、导致无法在当前的系统版本上运行”的功能效果。

实现思路如下:

  • 要获得APP的目标运行版本,也要知道系统的编译版本
  • 通过版本比较,在进入该APP时,给用户做出“不支持运行”的提示
  • 用户确认提示后,直接退出该APP

关键点是 targetSdkVersion 的使用,源码如下:

1、主Activity

public class TargetSdkVersionDemo extends Activity {
  @Override
  protected void onCreate(Bundle onSavedInstance) {
    super.onCreate(onSavedInstance);
    setContentView(R.layout.target_sdk_version_demo);

    int appTargetSdkVersion = getApplicationInfo().targetSdkVersion;
    Log.i("TargetSdkVersionDemo", "targetsdkversion " + appTargetSdkVersion);
    
    // 我们假设这个APP的目标运行版本不高于 API Level 26
    if (appTargetSdkVersion <= Build.VERSION_CODES.O) {
      showNotSupportDialog(appTargetSdkVersion);
    }
  }

  private void showNotSupportDialog(int version) {
    new AlertDialog.Builder(this)
        .setMessage("该APP的目标运行版本是 " + version + ",低于手机当前的版本,不支持运行!")
        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {

            // 退出程序
            finish();
          }
        })
        .create()
        .show();

  }
}

2、在AndroidManifest.xml中需要定义 uses-sdk 这个标签的 targetSdkVersion 属性:

<uses-sdk android:targetSdkVersion="25" />

注意:

如果在 app 目录下的 build.gradle 文件中定义了 targetSdkVersion,则会覆盖 AndroidManifest中的值,源码中有说明:

3、效果图如下:

我们注意到程序中使用的是 getApplicationInfo().targetSdkVersion,说明这个变量是 ApplicationInfo.java 的成员变量,这个值是在安装APK的过程中、由系统服务 PackageManagerService 解析赋值的,解析的源码位于 frameworks\base\core\java\android\content\pm\PackageParser.java 中:

可以看到:

  • 先解析 TAG_USES_SDK(uses-sdk)
  • 再解析属性名 targetSdkVersion 以及 minSdkVersion 的值

最后再赋值给 applicationInfo对象的:

pkg.applicationInfo.targetSdkVersion = targetSdkVersion

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们