Android如何讓APP無法在指定的系統(tǒng)版本上運(yùn)行(實(shí)現(xiàn)方法)
隨著市面上越來越多三方APP的出現(xiàn),某些手機(jī)廠商也開始對(duì)這些APP進(jìn)行了安裝限制或者運(yùn)行限制,或者三方APP自身的版本過低,無法被特定的系統(tǒng)版本所支持。
今天我將要模擬實(shí)現(xiàn)一個(gè)“由于APP自身版本過低、導(dǎo)致無法在當(dāng)前的系統(tǒng)版本上運(yùn)行”的功能效果。
實(shí)現(xiàn)思路如下:
要獲得APP的目標(biāo)運(yùn)行版本,也要知道系統(tǒng)的編譯版本 通過版本比較,在進(jìn)入該APP時(shí),給用戶做出“不支持運(yùn)行”的提示 用戶確認(rèn)提示后,直接退出該APP關(guān)鍵點(diǎn)是 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);// 我們假設(shè)這個(gè)APP的目標(biāo)運(yùn)行版本不高于 API Level 26 if (appTargetSdkVersion <= Build.VERSION_CODES.O) { showNotSupportDialog(appTargetSdkVersion); } } private void showNotSupportDialog(int version) { new AlertDialog.Builder(this).setMessage('該APP的目標(biāo)運(yùn)行版本是 ' + version + ',低于手機(jī)當(dāng)前的版本,不支持運(yùn)行!').setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 退出程序 finish(); }}).create().show(); }}
2、在AndroidManifest.xml中需要定義 uses-sdk 這個(gè)標(biāo)簽的 targetSdkVersion 屬性:
<uses-sdk android:targetSdkVersion='25' />
注意:
如果在 app 目錄下的 build.gradle 文件中定義了 targetSdkVersion,則會(huì)覆蓋 AndroidManifest中的值,源碼中有說明:
3、效果圖如下:
我們注意到程序中使用的是 getApplicationInfo().targetSdkVersion,說明這個(gè)變量是 ApplicationInfo.java 的成員變量,這個(gè)值是在安裝APK的過程中、由系統(tǒng)服務(wù) PackageManagerService 解析賦值的,解析的源碼位于 frameworksbasecorejavaandroidcontentpmPackageParser.java 中:
可以看到:
先解析 TAG_USES_SDK(uses-sdk) 再解析屬性名 targetSdkVersion 以及 minSdkVersion 的值最后再賦值給 applicationInfo對(duì)象的:
pkg.applicationInfo.targetSdkVersion = targetSdkVersion
到此這篇關(guān)于Android如何讓APP無法在指定的系統(tǒng)版本上運(yùn)行的文章就介紹到這了,更多相關(guān)android app無法運(yùn)行內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. python excel和yaml文件的讀取封裝2. moment轉(zhuǎn)化時(shí)間戳出現(xiàn)Invalid Date的問題及解決3. python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊4. idea重置默認(rèn)配置的方法步驟5. Android組件化和插件化開發(fā)6. Python內(nèi)存映射文件讀寫方式7. php實(shí)現(xiàn)當(dāng)前用戶在線人數(shù)8. Android Studio 2.0 功能介紹9. Ajax返回值類型與用法實(shí)例分析10. Python中內(nèi)建模塊collections如何使用
