Xamarin.Android 使用 ApkTool 编辑 apk 包名称导致崩溃

Xamarin.Android edit apk package name with ApkTool causes crash

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

"monodroid" "No assemblies found in '(null)' or '/storage/emulated/0/Android/data/com.newpackagename/files/.override'. Assuming this is part of Fast Deployment. Exiting..."

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

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

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

的 folder/file
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 库的错误导致所有 "unknown" 文件都存储为 DEFLATED。这将 DLLs 的存储格式从 STORED 更改为 DEFLATED 因此出现此错误。

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

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