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

时间:2015-04-02 23:12:47

标签: android xamarin xamarin.android apktool package-name

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

" MonoDroid的" "在'(null)'中找不到任何组件或' /storage/emulated/0/Android/data/com.newpackagename/files /。覆盖'。假设这是快速部署的一部分。退出..."

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

1 个答案:

答案 0 :(得分:2)

Xamarin依赖于在最终构建的apk中存储aapt(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的存储格式从STORED更改为DEFLATED,从而导致此错误。

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

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