经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
【Android初级】如何让APP无法在指定的系统版本上运行
来源:cnblogs  作者:snowyeti  时间:2021/2/1 11:32:40  对本文有异议

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

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

实现思路如下:

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

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

  3. 用户确认提示后,直接退出该APP

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

1、主Activity

  1. public class TargetSdkVersionDemo extends Activity {
  2. @Override
  3. protected void onCreate(Bundle onSavedInstance) {
  4. super.onCreate(onSavedInstance);
  5. setContentView(R.layout.target_sdk_version_demo);
  6. int appTargetSdkVersion = getApplicationInfo().targetSdkVersion;
  7. Log.i("TargetSdkVersionDemo", "targetsdkversion " + appTargetSdkVersion);
  8. // 我们假设这个APP的目标运行版本不高于 API Level 26
  9. if (appTargetSdkVersion <= Build.VERSION_CODES.O) {
  10. showNotSupportDialog(appTargetSdkVersion);
  11. }
  12. }
  13. private void showNotSupportDialog(int version) {
  14. new AlertDialog.Builder(this)
  15. .setMessage("该APP的目标运行版本是 " + version + ",低于手机当前的版本,不支持运行!")
  16. .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  17. @Override
  18. public void onClick(DialogInterface dialog, int which) {
  19. // 退出程序
  20. finish();
  21. }
  22. })
  23. .create()
  24. .show();
  25. }
  26. }

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

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

注意:

如果在 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对象的:

  1. pkg.applicationInfo.targetSdkVersion = targetSdkVersion

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

原文链接:http://www.cnblogs.com/snowyeti/p/14354670.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号