【问题标题】:Getting name of original .APK file in Android在Android中获取原始.APK文件的名称
【发布时间】:2015-07-06 06:24:49
【问题描述】:

我试图弄清楚如何获取安装应用程序的原始 .apk 文件的名称。我知道您可以使用ApplicationInfo 类(此处描述:Android: how to get the name of apk file programmatically?)检索已安装应用程序的包名称和源目录,但这不是我想要的。

例如,假设我有一个名为TestApp 的简单应用程序(通过AndroidManifest.xml 文件中的android:label 标记)。此外,假设我为上面的应用程序生成了一个 .apk 文件,将 .apk 文件重命名为 TestApp_JohnDoe.apk,然后将该应用程序通过电子邮件发送给 John Doe 进行安装。当 John Doe 通过单击 .apk 文件安装应用程序时,我希望能够读取我发送给他的原始 .apk 的文件名TestApp_JohnDoe.apk。使用ApplicationInfo 类,更具体地说,sourceDir 方法为我提供了安装目录和应用程序名称/data/app/TestApp.apk,这不是我想要的。我知道可能会扫描所有可用目录以查找原始 .apk 文件,但我希望避免这种情况。

总之,我想以编程方式检索安装程序 .apk 的 .apk 文件名/源目录,例如 /storage/sdcard0/Download/TestApp_JohnDoe.apk,而不是实际安装的应用程序的 .apk 文件名/源目录 /data/app/TestApp.apk .

【问题讨论】:

  • 是什么让您认为该文件仍然存在并且位于您的应用程序可以读取的位置,对于每个可能的安装路径?
  • 这就是我想知道的——是否存在用于确定原始 .apk 文件名称的规定。即使删除了原始 .apk 文件,安装过程也可能会记下原始 .apk 文件的名称,该名称随后可在应用程序中使用;这就是我想要确定的。
  • 首先,我不知道这个信息被记录了。其次,一般情况下,用于安装的APK文件不要求具有可识别的文件名。仅仅因为 将文件命名为 TestApp_JohnDoe.apk 并不意味着 电子邮件客户端 会将其命名为 TestApp_JohnDoe.apk,当它在外部存储上制作临时副本以供在期间短暂使用时安装。将您的标识符放在应用程序中,无论是通过编译(参见 Bojan 的答案),还是打包在 assets/ 中,等等。

标签: java android apk android-applicationinfo


【解决方案1】:

如果对你有用的话,可以让应用知道在编译时设置的 apk 名称

applicationVariants.all { variant ->
    // Change the target apk file name and path
    String apk_path = "$rootProject.projectDir/bin"
    String apk_name = "john_doe.apk"
    project.delete(project.apk_path) //Delete any remains
    String apkFile = String.format("%s/%s", apk_path, apk_name)
    variant.outputs[0].outputFile = new File(apkFile)
    // This can be used in Java runtime by using getString(R.string.apk_name)
    resValue "string", "apk_name", apk_name
}

但你要问的是,我很确定这是不可能的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2015-12-17
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多