使用aapt重命名包名称

时间:2014-10-06 20:00:12

标签: android package android-manifest apk android-xml

出于调试原因,我需要安装更多应用程序实例。我发现应用程序标识符位于APK文件中的二进制AndroidManifest.xml中,因此我不必在项目级别混淆具有不良后果的应用程序标识符。

请注意,stackoverflow上有类似的问题,但据我所知,没有人能回答这个问题。

重命名应该像运行以下命令一样简单:(其中apk_dir是提取原始APK的目录)

aapt package -v --rename-manifest-package com.xyz.abc apk_dir

但是,它仅枚举apk目录中的所有资源。没有任何变化,也没有打印错误信息。这非常令人困惑 - 当我指示一个工具进行无法进行的更改时,它应该让我清楚地知道它没有完成。

我不想使用的第三方工具很少,因为官方appt工具应该能够更改软件包名称(并且因为其他工具存在问题)。它似乎是一个强大的工具,但它没有被记录。然而,它打印的帮助看起来很有希望:

--rename-manifest-package
   Rewrite the manifest so that its package name is the package name
   given here.  Relative class names (for example .Foo) will be
   changed to absolute names with the old package so that the code
   does not need to change.

AndroidManifest.xml有两种格式也很不幸。除了预期的那个之外,还有二进制(已编译)清单XML文件,该文件被打包到APK文件中。这并不能使阅读文档更容易。

2 个答案:

答案 0 :(得分:0)

If you're using ANT-based builds, the Android SDK Tools 24.3 (and perhaps before) "aapt" task takes a "manifestPackage=<your_package>" argument and you can use this to repackage your APK. Copy the "-package-resources" target from the SDK's ant build.xml to your custom_rules.xml and add the additional argument.

答案 1 :(得分:0)

--rename-manifest-package在apk(而不是源(文本)AndroidManifest.xml)中更改(二进制)AndroidManifest.xml中的清单包名称。

您可以使用aapt (d)ump检查打包(二进制)版本。例如

aapt d xmltree myapp.apk AndroidManifest.xml

--rename-manifest-package首先使用AndroidManifest.xml中的清单包将所有相对名称完整为绝对名称,然后通过命令行将清单包重命名为新名称。

我仅在aapt (p)ackage命令中添加AndroidManifest.xml时才使用它。例如

aapt p -f --rename-manifest-package com.mynewpackagename -M AndroidManifest.xml -F myapp.apk -I android.jar -S res

我建议:使用AndroidManifest.xml打包具有活动相对路径的应用程序,而不重命名,并使用aapt dump检查apk。

然后,将其打包并进行重命名,然后使用aapt dump确认已更改的内容。


顺便说一句,aapt (d)ump的用法/帮助不是很清楚。从转储中以上,您可以得出WHAT表示以下7行之一; asset表示.apk中的内容,例如AndroidManifest.xml。

aapt d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]
   strings          Print the contents of the resource table string pool in the APK.
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.                                
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.