我需要在AndroidManifest.xml文件中做一些操作吗?
BuildConfig
中静态获取。 确保导入你的应用程序包,而不是另一个BuildConfig
:import com.yourpackage.BuildConfig;
...
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;
defaultConfig {
versionCode 1
versionName "1.0"
}
com.android.tools.build:gradle:1.3.0
一起工作。 - Kushal使用:
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String version = pInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
你可以使用以下代码获取版本号
int verCode = pInfo.versionCode;
getPackageInfo()
时加上try... catch...
语句。 - anticafeBuildConfig.VERSION_**
。请点击链接查看。 - Timo Bähr如果您只想获取版本名称,则可以使用稍微更短的版本。
try{
String versionName = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
你需要两个部分:
versionCode是一个数字,每次提交到市场的应用版本都需要比上一个版本号更高。
VersionName是一个字符串,可以是任何你想要的。这是你定义应用程序的版本号,如“1.0”、“2.5”、“2 Alpha EXTREME!”等等。
例如:
Kotlin:
val manager = this.packageManager
val info = manager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
toast("PackageName = " + info.packageName + "\nVersionCode = "
+ info.versionCode + "\nVersionName = "
+ info.versionName + "\nPermissions = " + info.permissions)
Java:
PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
Toast.makeText(this,
"PackageName = " + info.packageName + "\nVersionCode = "
+ info.versionCode + "\nVersionName = "
+ info.versionName + "\nPermissions = " + info.permissions, Toast.LENGTH_SHORT).show();
android:versionCode
和android:versionName
的描述可以在这里找到:http://developer.android.com/tools/publishing/versioning.html#appversioning - Goffredothis.getPackageName()
表示什么,但你刚才放置的0
并不知道其含义。 - Rafael LimaBuildConfig.VERSION_NAME
没错,现在变得非常容易了。
如果你的BuildConfig.VERSION_NAME
返回一个空字符串,请继续阅读。
我一直收到BuildConfig.VERSION_NAME
返回一个空字符串的情况,因为我没有在我的Gradle构建文件中设置versionName
(我从Ant迁移到Gradle)。因此,以下是确保通过Gradle设置VERSION_NAME
的说明。
def versionMajor = 3
def versionMinor = 0
def versionPatch = 0
def versionBuild = 0 // Bump for dogfood builds, public betas, etc.
android {
defaultConfig {
versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
}
}
注意:这是来自大师Jake Wharton的。
AndroidManifest.xml
中移除versionName
和versionCode
由于您现在已经在build.gradle
文件中设置了versionName
和versionCode
,如果它们存在于AndroidManifest.xml
文件中,则可以将它们移除。
versionName "1.2"
和 BuildConfig.VERSION_NAME
返回的是空值。API > 21。 - Sojtin2.6.23
版本,然后想要更新到2.7.0
版本,那么你得到的versionCode会比较早。因此,我应用了以下公式:versionCode = versionMajor * 10000 + versionMinor * 100 + versionPatch
,其中versionPatch
的值从0到100。 - 0x131313这是一个基于 scottyab的解决方法(由Xavi编辑)的简洁解决方案。如果您的方法未提供上下文,则它会显示如何首先获取上下文。此外,它使用多行而不是每行调用多个方法。当您需要调试应用程序时,这将使它更容易。
Context context = getApplicationContext(); // or activity.getApplicationContext()
PackageManager packageManager = context.getPackageManager();
String packageName = context.getPackageName();
String myVersionName = "not available"; // initialize String
try {
myVersionName = packageManager.getPackageInfo(packageName, 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
现在您已经在字符串myVersionName
中收到了版本名称,您可以将其设置为TextView或您喜欢的任何内容。
// Set the version name to a TextView
TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName);
tvVersionName.setText(myVersionName);
如果在系统上找不到给定名称的包,则抛出PackageManager.NameNotFoundException。
然而,我无法想象出这种情况! - Michael使用以下代码获取应用程序的版本或构建代码,它用于根据其版本代码识别APK文件。版本代码用于在更新、发布等操作时检测实际的构建配置。
int versionCode = BuildConfig.VERSION_CODE;
版本名称用于展示用户或开发者开发顺序。您可以随意添加任何类型的版本名称。
String versionName = BuildConfig.VERSION_NAME;
val versionCode = BuildConfig.VERSION_CODE
val versionName = BuildConfig.VERSION_NAME
String versionCode = String.valueOf(BuildConfig.VERSION_CODE);
String versionName = String.valueOf(BuildConfig.VERSION_NAME);
请确保在你的类中导入BuildConfig
。
使用BuildConfig类:
String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;
defaultConfig {
applicationId "com.myapp"
minSdkVersion 19
targetSdkVersion 27
versionCode 17
versionName "1.0"
}
截至2020年:自API 28以来(Android 9 (Pie)),“versionCode”已过时,所以我们可以使用“longVersionCode”。
val manager = context?.packageManager
val info = manager?.getPackageInfo(
context?.packageName, 0
)
val versionName = info?.versionName
val versionNumber = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
info?.longVersionCode
} else {
info?.versionCode
}
int versionCode = BuildConfig.VERSION_CODE;
,获取版本名使用String versionName = BuildConfig.VERSION_NAME;
。 - Lukas