Как узнать, какой Android API был создан APK против

Когда APK создается с заданным уровнем API, существует ли способ узнать, какой уровень API использовался для компиляции только с APK-файлом?

MinSdkVersion не обязательно соответствует уровню API, используемому для компиляции проекта, это просто записка для установщика Android для блокировки приложения, если minSdkVersion> текущая версия

Это еще один способ получить targetSdkVersion и targetSdkVersion моего приложения:

 try { PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); int versionCode = packageInfo.versionCode; int targetSdkVersion = packageInfo.applicationInfo.targetSdkVersion; } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, e.getMessage()); } 

Используя Android Studio , значения определяются в файле build.gradle

  defaultConfig { applicationId "com.tuna.hello.androidstudioapplication" minSdkVersion 9 targetSdkVersion 22 versionCode 12 versionName "1.0" } 
 BuildConfig.VERSION_CODE; 

а также

 getPackageManager().getPackageInfo(...). 

Даст нам:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... android:versionCode="1" android:versionName="..."> 

VersionCode, 1 в этом примере.

Уровень API, используемый для компиляции .apk, не мог найти способ проконсультироваться с ним во время выполнения, но если вы используете gradle, вы можете проверить его:

 android { compileSdkVersion 22 buildToolsVersion "22.0.1" ... } 

Если вы используете .iml , настроенный с помощью графических интерфейсов проекта IntelliJ:

 <component name="NewModuleRootManager" inherit-compiler-output="true"> ... <orderEntry type="inheritedJdk" /> ... </component> 

Project.properties :

 # This file is automatically generated by IntelliJ IDEA # Project target. target=Google Inc.:Google APIs:22 

Но поскольку build.gradle , project.iml и project.properties не поставляются с .apk, я не могу придумать способ получить команду compileSdkVersion во время выполнения или разархивировать .apk

Все, что вы могли бы получить, должно быть в ApplicationInfo, которое вы получаете из PackageManager, поэтому вы должны получить ApplicationInfo, а затем посмотреть, что вы можете извлечь из него, то есть:

 getPackageManager().getPackageInfo(...).targetSdkVersion 

Ссылка: http://developer.android.com/reference/android/content/pm/ApplicationInfo.html

Зайдите в раздел «Поля» ссылки. Посмотрите на поле «sourceDir».

Я надеюсь, что это поможет вам, и, пожалуйста, проголосуйте за все, что помогло / спустило вас.

С наилучшими пожеланиями.

Попробуй это:

 android.os.Build.VERSION.SDK_INT 

Как узнать, в каком Android-приложении работает ваше приложение:

 int myAPI = Build.VERSION.SDK_INT; 

Как узнать версию VersionCode APK:

 String versionCode = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionName; 

Примечание: ctx – это контекст приложения.

Но, если быть более конкретным, измените расширение вашего файла APK на .zip и извлеките Manifest.xml после чего вы увидите minSdkVersion , targetSdkVersion , targetSdkVersion т. Д. …