为了账号安全,请及时绑定邮箱和手机立即绑定

【Android初级】如何让APP无法在指定的系统版本上运行

标签:
Java Android

随着市面上越来越多三方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中的值,源码中有说明:

file

3、效果图如下:

gif

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

file

可以看到:

  • 先解析 TAG_USES_SDK(uses-sdk)

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

最后再赋值给 applicationInfo对象的:

pkg.applicationInfo.targetSdkVersion = targetSdkVersion

> 原文作者 Leon

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
0
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消