【问题标题】:.apk filename changes after doing adb install执行 adb install 后 .apk 文件名更改
【发布时间】: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


【解决方案1】:

你不能依赖这个,它绝对不使用'-'后面的数字的版本代码。特别是对于较新的版本,应用程序可以移动到 SD 卡,或向前锁定(又名“应用程序加密”),因此磁盘上的实际文件可能与原始文件有很大不同。

使用PackageManager 获取版本信息,保证正确且最新。更改您的构建系统以更新版本代码,并可能在“关于”对话框或类似对话框中显示它,以便用户轻松报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多