2015-05-19 14 views
5

Khi APK được tạo với Cấp API cụ thể, có cách nào để biết cấp API nào được sử dụng để biên dịch chỉ có tệp APK không?Làm cách nào để biết APK Android nào được xây dựng dựa trên

Các minSdkVersion không nhất thiết phải phù hợp với Cấp API được sử dụng để biên dịch dự án, nó chỉ là một ghi chú cho trình cài đặt Android để chặn các ứng dụng nếu minSdkVersion> phiên bản hiện tại

Trả lời

0

Hãy thử điều này:

android.os.Build.VERSION.SDK_INT 
+0

cung cấp cho bạn phiên bản SDK điện thoại, chứ không phải SDK .apk – GuilhE

+0

là cấp API Android. Tôi tin rằng đây là những gì anh ta yêu cầu. –

+0

Tôi nghĩ anh ấy hỏi mức API nào được sử dụng để biên dịch .apk không phải cấp API mà điện thoại sử dụng. Có lẽ tôi đã hiểu sai – GuilhE

2
BuildConfig.VERSION_CODE; 

getPackageManager().getPackageInfo(...). 

sẽ cho chúng ta:

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

mã phiên bản, 1 trong ví dụ này.

API Cấp sử dụng để biên dịch .apk tôi không thể tìm thấy một cách để tham khảo nó trong thời gian chạy, nhưng nếu bạn sử dụng gradle bạn có thể kiểm tra xem nó:

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

nếu bạn đang sử dụng . IML, cấu hình với IntelliJ cấu hình dự án GUI:

<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 

nhưng vì build.gradle, project.imlproject.properties không vận chuyển với .apk Tôi không thể nghĩ ra một cách để có được những compileSdkVersion trong thời gian chạy hoặc giải nén .apk

+0

Điều này sẽ chỉ nhận được mã phiên bản cho gói (ứng dụng) mã này đang chạy trong –

1

Tất cả những gì bạn có thể nhận nên trên ApplicationInfo mà bạn nhận được từ PackageManager, vì vậy bạn sẽ nhận được ApplicationInfo và sau đó xem những gì bạn có thể nhận được ra khỏi nó, ví dụ:

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

Tham chiếu: http://developer.android.com/reference/android/content/pm/ApplicationInfo.html

Kiểm tra phần "Trường" của tham chiếu. Hãy xem trường "sourceDir".

Tôi hy vọng đây là bất kỳ trợ giúp nào cho bạn và vui lòng bỏ phiếu lên/xuống bất cứ điều gì đã giúp/bỏ qua bạn.

Trân trọng.

+0

Điều này không trả lời câu hỏi của mình .targetSdkVersion , như đã nói, nó chỉ là một lưu ý cho trình cài đặt Android để chặn một số điện thoại trong PlayStore. Cấp API được phân phối bởi .versionCode. Kiểm tra câu trả lời của tôi. – GuilhE

+0

@GuilhE câu trả lời của bạn trả lại bất kỳ mã nào bạn đã đặt trong tệp kê khai, điều này là tùy ý và không liên quan đến SDK. Kiểm tra ở đây: http://developer.android.com/reference/android/content/pm/PackageInfo.html#versionCode – FeleMed

+0

Đúng vậy, tôi đã sai, getPackageManager() sẽ cung cấp thông tin về gói ứng dụng mà chúng tôi đã sử dụng trong tệp kê khai. Kiểm tra câu trả lời cập nhật của tôi. – GuilhE

0

Làm thế nào để biết được Android API ứng dụng của bạn đang chạy:

int myAPI = Build.VERSION.SDK_INT; 

Làm thế nào để biết APK's mã phiên bản được xây dựng:

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

Lưu ý: ctx là ứng dụng Context.

Nhưng để cụ thể hơn, thay đổi phần mở rộng của tập tin APK của bạn để .zip, và trích xuất các Manifest.xml sau đó bạn sẽ nhìn thấy versionCode, minSdkVersion, targetSdkVersion vv ...

+0

Build.VERSION.SDK_INT; sẽ cung cấp cho mức API hiện tại của điện thoại – GuilhE

+0

Có, tôi biết, tôi nghĩ giải pháp tốt nhất cho câu hỏi này là mở tệp AndroidManifest.xml của ứng dụng trực tiếp. ;) – Jorgesys

+0

Bạn có biết nếu có thể kiểm tra nó trong thời gian chạy không? Btw, với gradle bạn có thể thiết lập compileSdkVersion nhưng không có trong tệp kê khai. Vì vậy, cách tốt nhất là mở build.gradle hoặc project.iml – GuilhE

2

Đây là một cách khác để lấy targetSdkVersionversionCode của ứng dụng của tôi:

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()); 
     } 

sử dụng Android Studio, các giá trị được định nghĩa vào build.gradle tập tin của tôi

defaultConfig { 
     applicationId "com.tuna.hello.androidstudioapplication" 
     minSdkVersion 9 
     targetSdkVersion 22 
     versionCode 12 
     versionName "1.0" 
    } 
+0

Với góiInfo bạn nhận được tất cả defaultConfig của bạn (nếu sử dụng gradle) hoặc manifest thông tin nhưng không phải là compileSdkVersion là thông tin mong muốn. – GuilhE

Các vấn đề liên quan