如何获取依赖包的版本代码?

时间:2016-01-09 14:48:32

标签: java android

我正在尝试获取在不同项目中编译的包的版本代码,并将其作为依赖项链接到此项目中。我经常对这两个项目进行更改,所以我想知道版本号。

此处的解决方案:How to get the build/version number of your Android application?显示了如何从上下文中获取版本代码,但这将产生当前项目中的包的版本代码,而不是依赖的版本。

以下是我尝试过的代码(3-Scenarios):

public static int getPackageVersion(Context context, Class<?> tClass) {
    int versionCode = 0;

    //#1) Get Package name from class
    String packageName = tClass.getPackage().getName();

    //#2) Set Domain manually to top level package
    //String packageName = "com.somedomain";

    //#3) Get package name from context from this package
    //String packageName = context.getPackageName();

    Log.i(TAG, packageName);

    try {
        versionCode = context.getPackageManager().getPackageInfo(
                packageName, 0).versionCode;
    } catch (PackageManager.NameNotFoundException e) {

        Log.e(TAG, packageName);
        throw new RuntimeException();
    }

    return versionCode;
}

#1)显示该方法最初的功能,它使用packageName作为类。结果在NameNotFound。

#2)我手动设置依赖包的顶级packageName,类似于context.getPackageName()返回的值。结果在NameNotFound。

#3)我使用了context.getPackageName(),代码返回了这个项目中包的版本代码 - 正如预测的那样,但不是我需要的结果。

我已经有了一个不优雅的黑客攻击,我只是将版本号作为一个字段存储在其中一个类中,但是一个合适的解决方案(如果存在的话)会很棒。

1 个答案:

答案 0 :(得分:3)

一个合适的解决方案是使用BuildConfig文件来存储这些值(对于每个项目/子项目)。
Android Gradle插件已包含以下字段:

android {
    defaultConfig {
        versionCode 1
        versionName "1.0.0"
    }
}

然后使用your.package.name.BuildConfig.VERSION_NAMEyour.package.name.BuildConfig.VERSION_CODE

获取字段