我正在尝试获取在不同项目中编译的包的版本代码,并将其作为依赖项链接到此项目中。我经常对这两个项目进行更改,所以我想知道版本号。
此处的解决方案: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(),代码返回了这个项目中包的版本代码 - 正如预测的那样,但不是我需要的结果。
我已经有了一个不优雅的黑客攻击,我只是将版本号作为一个字段存储在其中一个类中,但是一个合适的解决方案(如果存在的话)会很棒。
答案 0 :(得分:3)
一个合适的解决方案是使用BuildConfig文件来存储这些值(对于每个项目/子项目)。
Android Gradle插件已包含以下字段:
android {
defaultConfig {
versionCode 1
versionName "1.0.0"
}
}
然后使用your.package.name.BuildConfig.VERSION_NAME
或your.package.name.BuildConfig.VERSION_CODE