栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

如何让APP无法在指定的系统版本上运行

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何让APP无法在指定的系统版本上运行

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

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

实现思路如下:

  1. 要获得APP的目标运行版本,也要知道系统的编译版本

  2. 通过版本比较,在进入该APP时,给用户做出“不支持运行”的提示

  3. 用户确认提示后,直接退出该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 属性:


注意:

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

3、效果图如下:

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

可以看到:

  • 先解析 TAG_USES_SDK(uses-sdk)

  • 再解析属性名 targetSdkVersion 以及 minSdkVersion 的值

最后再赋值给 applicationInfo对象的:

pkg.applicationInfo.targetSdkVersion = targetSdkVersion

> 原文作者 Leon

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号