2

我需要能够更改现有 .apk 的包名称,以便同时运行我在 Visual Studio 中使用 Xamarin 创建的 Android 应用程序的实例。但是,当我需要更改此包名称时,我将无法可靠地访问具有 Xamarin 许可证的计算机,因此我不能简单地编辑清单预构建。我尝试使用 ApkTool 解压缩 apk,编辑清单,然后重新打包并重新签署 apk。但是,虽然我能够将这个新的 apk 与原始 apk 并排安装在设备上,但新的应用程序实例无法启动。我收到以下错误:

"monodroid" "在 '(null)' 或 '/storage/emulated/0/Android/data/com.newpackagename/files/. override '中找不到程序集。假设这是快速部署的一部分。正在退出..."

我认为这意味着在构建后以某种方式更改包名称已经丢失了一些到程序集的链接。但是,即使在搜索了整个解压缩的 apk(文件夹和文件内)之后,我也找不到对原始包名称的剩余引用。所以我想弄清楚如何重新获得这些程序集以允许我的应用程序运行。我知道这是非常不寻常的,它甚至可能不是正确的方法,但我需要能够在不访问 Xamarin 的情况下更改我的包名称。这似乎是最有希望的解决方案。

4

1 回答 1

2

Xamarin 依赖aapt于在最终构建的 apk 中存储(Android 资产打包工具)未知的文件。这些文件通常以压缩类型插入assemblies到 apk 根目录内的文件夹中,STORED以便 Xamarin 无需解压缩即可访问这些文件。

Apktool 用于忽略所有aapt将忽略的文件。IE。如果文件不是此数组的文件夹/文件

private final static String[] APK_STANDARD_ALL_FILENAMES = new String[] {
        "classes.dex", "AndroidManifest.xml", "resources.arsc", "res", "lib", "libs", "assets", "META-INF" };

比 Apktool 会忽略它。但是,在开发过程中尝试2.0.x包含这些未知文件。

Java 7 NIO 库的一个错误导致所有“未知”文件存储为DEFLATED. DLLs这将from的存储格式更改STOREDDEFLATED因此出现此错误。

此错误已于 3 月 25 日修复 - https://github.com/iBotPeaches/Apktool/commit/628286c022e3a872d6ab6bfb3431579f98743c25

截至 2015 年 4 月 8 日 - 没有包含此修复程序的官方版本。在发布之前,您可以自己构建Apktool 2.0.0 Gold

于 2015-04-08T16:20:56.367 回答