如何以编程方式从Android应用程序中读取gradle文件属性

时间:2015-04-01 14:08:14

标签: android android-studio gradle

build.gradle文件包含以下部分。如何从Android应用 MainActivity

中读取 android.defaultConfig.versionCode
android {
    defaultConfig {
        applicationId "com.gatta.e.gatta"
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
}

3 个答案:

答案 0 :(得分:4)

您无需读取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(...)方法中使用它来获取版本代码:

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

有关PackageInfo班级here的更多信息。并快速描述了该课程:

  

有关包裹内容的整体信息。这对应于从AndroidManifest.xml收集的所有信息。

答案 1 :(得分: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); 
                }
        }
}

答案 2 :(得分:1)

以上属性是特定于构建配置的。您可以在java文件中将它们作为BuildConfig.propertyName引用,因为所有构建配置变量都会自动转换为文件BuildConfig.java中的静态资源。  例如applicationId可以用作

    BuildConfig.APPLICATION_ID

在您的情况下,您可以将versionCode引用为:

    BuildConfig.VERSION_CODE

如果你想拥有自定义BuildConfig,你也可以这样做:  在你的build.gradle默认配置/风味部分使用:

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

e.g。

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

我希望它有所帮助。