【发布时间】:2012-07-24 20:07:54
【问题描述】:
如果我这样做:
adb install myAppRelease-2012-07-24_14-35-14.apk
当我在安装后尝试引用实际的 .apk 文件时
PackageManager pm = this.getPackageManager();
for (ApplicationInfo app : pm.getInstalledApplications(PackageManager.GET_META_DATA)) {
Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir);
String appName = "myAppRelease"
if(app.packageName.contains("myApp")){
if(app.sourceDir.contains(appName)){
apkVersion = app.sourceDir.substring(app.sourceDir.indexOf(appName), app.sourceDir.indexOf(apk));
}
}
}
我看到的是这样的:
07-24 14:46:40.190: D/PackageList(7421): package: myApp, sourceDir: /data/app/myApp-1.apk
我期望看到的是这样的:
07-24 14:46:40.190: D/PackageList(7421): package: myApp, sourceDir: /data/app/myAppRelease-2012-07-24_14-35-14.apk
看来它使用
android:label="myApp"
android:versionCode="1"
来自清单文件。
我的问题是,为什么它不保留原始的 .apk 文件名?我依靠 .apk 文件名来显示我的应用程序的版本信息。
【问题讨论】:
-
您确定它使用 Manifest 中的标签和版本代码吗?也就是说,你有没有尝试过一些其他的名字并得到了可靠的结果?
-
"我依靠 .apk 文件名来显示我的应用程序的版本信息" -- 请使用
<manifest>元素的android:versionName属性来"显示[您的] 应用程序的版本信息”。您可以从PackageManager获取此信息。 -
我们有一个自动构建系统,可以创建文件名中包含版本信息的 .apk 文件。我们试图避免在每次对应用程序进行更改时更新
android:versinName。 -
现在测试标签和版本代码的变化。
-
也许您可以在构建系统中使用 versionCode 而不是 versionName。 versionCode 对您的最终用户将完全不可见。正如 CommonsWare 所说,PackageManager.getPackageInfo() 可以获得 versionName 和 versionCode。
标签: android android-manifest apk adb