2015-04-01 114 views

回答

4

閱讀android.defaultConfig.versionCode您不必讀取文件的gradle獲得版本代碼。這裏是直接的方式從活動中:

private PackageInfo getPackageInfo() { 
    PackageInfo pi = null; 
    try { 
     pi = this.getPackageManager().getPackageInfo(
         this.getPackageName(), PackageManager.GET_ACTIVITIES); 
    } catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
     Log.e("yourTagHere", e.getMessage()); 
    } 
    return pi; 
} 

,並使用該在你onCreate(...)方法,例如獲得版本代碼:上herePackageInfo

String versionCode = "" + getPackageInfo().versionCode; 

更多信息。並且該類的快速說明:

有關軟件包內容的整體信息。這對應於從AndroidManifest.xml收集的所有信息。

+1

另外,我甚至不認爲有可能用內置的API讀取gradle文件,因爲並非所有IDE似乎都使用Gradle來構建APK,所以它不值得實施。 – 2015-04-01 14:17:49

+1

@ TheDDestroyer12:正確。此外,使用Android Studio構建時,似乎_build.gradle_甚至不包含在APK中,這很有道理。 – Voicu 2015-04-01 14:22:27

2

我認爲你不能讀取build.gradle文件中的任何屬性,但有一個API來獲取應用程序版本代碼和版本名稱。

這是我一直使用的實用程序類。

import android.content.Context; 
import android.content.pm.PackageInfo; 
import android.content.pm.PackageManager.NameNotFoundException; 

/** 
* Utility class used in getting application version code and version name. 
*/ 
public class AppUtils { 

     /** 
     * @return Application's version code from the PackageManager. 
     */ 
     public static int getAppVersionCode(Context context) { 
       try { 
         PackageInfo packageInfo = context.getPackageManager() 
             .getPackageInfo(context.getPackageName(), 0); 
         return packageInfo.versionCode; 
       } catch (NameNotFoundException e) { 
         // should never happen 
         throw new RuntimeException("Could not get package name: " + e); 
       } 
     } 

     /** 
     * @return Application's version name from the PackageManager. 
     */ 
     public static String getAppVersionName(Context context) { 
       try { 
         PackageInfo packageInfo = context.getPackageManager() 
             .getPackageInfo(context.getPackageName(), 0); 
         return packageInfo.versionName; 
       } catch (NameNotFoundException e) { 
         // should never happen 
         throw new RuntimeException("Could not get package name: " + e); 
       } 
     } 
} 
1

上面的屬性是構建配置特定的。您可以將它們作爲BuildConfig.propertyName在您的java文件中引用,因爲所有構建配置變量都會自動轉換爲文件BuildConfig.java中的靜態資源。 例如的applicationID可以作爲

BuildConfig.APPLICATION_ID 

你的情況,你可以參考的versionCode爲:在您的build.gradle默認 :

BuildConfig.VERSION_CODE 

,如果你想定製BuildConfig你也可以這樣做如下config/flavor部分使用:

buildConfigField "variable type", "variable name", new Type(var name) 

eg

multiDexEnabled false 
    buildConfigField "Boolean", "MY_FIELD", new Boolean(multiDexEnabled).toString 

我希望它有幫助。

相關問題