我正在使用以下代码在MyApplication类中以编程方式获取版本名称和版本代码,并将它们声明为静态成员
public class MyApplication extends Application {
Public static String MY_VERSION_NAME;
Public static int MY_VERSION_NAME;
@Override
public void onCreate() {
getPackageInfo();
}
private void getPackageInfo() {
Context context = getApplicationContext();
PackageManager manager = context.getPackageManager();
try {
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
MY_VERSION_NAME = info.versionName;
MY_VERSION_CODE = (int) PackageInfoCompat.getLongVersionCode(info);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
myversionName = "Unknown-01";
}
}
}
我的应用程序gradle文件是:
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.example"
minSdkVersion 19
targetSdkVersion 28
versionCode 15
versionName "0.95"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
}
lintOptions {
disable 'MissingTranslation'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}}
在调试模式下显示正确的版本名称(0.95-DEBUG)和版本代码(15),但在发布模式下显示旧版本名称(0.85)和版本代码(11)。
我该如何解决这个问题? 我已经在许多设备上尝试过,结果是一样的。
编辑:该问题也存在于设置> app>应用信息中。
答案 0 :(得分:4)
代替使用
PackageManager manager = context.getPackageManager();
try {
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
MY_VERSION_NAME = info.versionName;
MY_VERSION_CODE = (int) PackageInfoCompat.getLongVersionCode(info);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
myversionName = "Unknown-01";
}
使用
BuildConfig.VERSION_NAME
BuildConfig.VERSION_CODE
*编辑
要获取信息时,其中YOUR_MODULE_PACKAGE_NAME是模块的名称。
请记住,如果您通过应用程序的上下文,则将获得有关该模块的信息
PackageInfo packageInfo = getPackageManager().getPackageInfo(YOUR_MODULE_PACKAGE_NAME, 0);
packageInfo.versionName;
packageInfo.versionCode;