时间:2021-05-19
随着市面上越来越多三方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 中:
可以看到:
最后再赋值给 applicationInfo对象的:
pkg.applicationInfo.targetSdkVersion = targetSdkVersion到此这篇关于Android如何让APP无法在指定的系统版本上运行的文章就介绍到这了,更多相关android app无法运行内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android版本更替,新的版本带来新的特性,新的方法。新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会c
本文实例讲述了Android编程判断当前指定App是否在前台的方法。分享给大家供大家参考,具体如下://在进程中去寻找当前APP的信息,判断是否在前台运行pri
本文实例讲述了Android开发实现根据包名判断App运行状态的方法。分享给大家供大家参考,具体如下:前面讲过Android开发判断一个app应用是否在运行的方
DefineAlternativeStyles定义替代样式让你的app,使用MaterialDesign的主题运行在支持它的设备上,并在早期版本的设备上可以运行
前言不同版本的动态库可能会不兼容,如果程序在编译时指定动态库是某个低版本,运行是用的一个高版本,可能会导致无法运行。Linux上对动态库的命名采用libxxx.