Android如何让APP无法在指定的系统版本上运行(实现方法)

 更新时间:2021年02月04日 08:46:45   作者:snowyeti  
这篇文章主要介绍了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

到此这篇关于Android如何让APP无法在指定的系统版本上运行的文章就介绍到这了,更多相关android app无法运行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android开发之菜单(menu)用法实例分析

    Android开发之菜单(menu)用法实例分析

    这篇文章主要介绍了Android开发之菜单(menu)用法,结合实例形式较为详细的分析了Android菜单的实现步骤与相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • Android最新版本开发环境搭建图文教程

    Android最新版本开发环境搭建图文教程

    这篇文章主要为大家详细介绍了Android最新版本开发环境搭建图文教程,重点在于配置JDK,以及adt-bundle,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android编程实现的短信编辑器功能示例

    Android编程实现的短信编辑器功能示例

    这篇文章主要介绍了Android编程实现的短信编辑器功能,涉及Android权限控制、界面布局及短信功能相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Flutter实现红包动画效果的示例代码

    Flutter实现红包动画效果的示例代码

    这篇文章主要为大家详细介绍了如何利用Flutter实现红包的动画效果,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Android使用SoundPool实现播放音效

    Android使用SoundPool实现播放音效

    这篇文章主要为大家详细介绍了Android使用SoundPool实现播放音效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android OkHttp 结合php 多图片上传实例

    Android OkHttp 结合php 多图片上传实例

    本篇文章主要介绍了Android OkHttp 结合php 多图片上传实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Kotlin与Java相互调用的完整实例

    Kotlin与Java相互调用的完整实例

    Kotlin的设计过程中就考虑到了与Java的互操作性,在Kotlin中可以直接调用既有的Java代码,反过来在Java中也可以很流畅地使用Kotlin代码,这篇文章主要给大家介绍了关于Kotlin与Java相互调用的相关资料,需要的朋友可以参考下
    2021-12-12
  • Android实现简单动态搜索功能

    Android实现简单动态搜索功能

    这篇文章主要为大家详细介绍了Android实现简单动态搜索功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android开发RecyclerView单独刷新使用技巧

    Android开发RecyclerView单独刷新使用技巧

    本篇文章主要是分享下RecyclerView中子item如何单独刷新以及子item的某一部分内容如何实现单独刷新,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android AlertDialog的几种用法详解

    Android AlertDialog的几种用法详解

    这篇文章主要介绍了Android AlertDialog的几种用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论