2015-04-01 73 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 

我希望它有帮助。

相关问题