Android如何讓APP無法在指定的系統(tǒng)版本上運行(實現(xiàn)方法)
隨著市面上越來越多三方APP的出現(xiàn),某些手機廠商也開始對這些APP進行了安裝限制或者運行限制,或者三方APP自身的版本過低,無法被特定的系統(tǒng)版本所支持。
今天我將要模擬實現(xiàn)一個“由于APP自身版本過低、導(dǎo)致無法在當前的系統(tǒng)版本上運行”的功能效果。
實現(xiàn)思路如下:
- 要獲得APP的目標運行版本,也要知道系統(tǒng)的編譯版本
- 通過版本比較,在進入該APP時,給用戶做出“不支持運行”的提示
- 用戶確認提示后,直接退出該APP
關(guā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è)這個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的過程中、由系統(tǒng)服務(wù) PackageManagerService 解析賦值的,解析的源碼位于 frameworks\base\core\java\android\content\pm\PackageParser.java 中:
可以看到:
- 先解析 TAG_USES_SDK(uses-sdk)
- 再解析屬性名 targetSdkVersion 以及 minSdkVersion 的值
最后再賦值給 applicationInfo對象的:
pkg.applicationInfo.targetSdkVersion = targetSdkVersion
到此這篇關(guān)于Android如何讓APP無法在指定的系統(tǒng)版本上運行的文章就介紹到這了,更多相關(guān)android app無法運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Fragment的靜態(tài)注冊和動態(tài)注冊創(chuàng)建步驟
這篇文章主要介紹了Android Fragment的靜態(tài)注冊和動態(tài)注冊創(chuàng)建步驟,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02Android使用ViewPager實現(xiàn)啟動引導(dǎo)頁效果
這篇文章主要為大家詳細介紹了Android使用ViewPager實現(xiàn)啟動引導(dǎo)頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04Android音頻開發(fā)之錄制音頻(WAV及MP3格式)
這篇文章主要為大家介紹了Android如何實現(xiàn)音頻文件的錄制(WAV及MP3格式),文中代碼具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12一文帶你看懂Android Application啟動流程是怎樣的
談到Android Application的啟動流程,很多文章都是各種源碼類和方法的一堆調(diào)用關(guān)系,這樣的文章就算看一百遍,也只是云里霧里。源碼得看,但是最好不要一下子深陷到源碼的細節(jié)之中,不可自拔。這里站在前人的基礎(chǔ)之上做一個總結(jié)2021-10-10Android RecyclerView的Item點擊事件實現(xiàn)整理
這篇文章主要介紹了Android RecyclerView的Item點擊事件實現(xiàn)整理的相關(guān)資料,需要的朋友可以參考下2017-01-01Android實現(xiàn)讀取掃碼槍內(nèi)容(條形碼)
這篇文章主要為大家詳細介紹了Android實現(xiàn)讀取掃碼槍內(nèi)容、條形碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09