【问题标题】:Encode/Decode AndroidManifest.xml inside APK在 APK 中编码/解码 AndroidManifest.xml
【发布时间】:2013-05-22 12:55:58
【问题描述】:

我正在使用 ApkTool 解码 APK 文件中的 AndroidManifest.xml 并且它可以完美运行,但是在应用一些更改之后,我如何才能再次对其进行编码,就像之前的编码方式一样?例如(在我的情况下)更改应用标签。

【问题讨论】:

  • 向开发者索取原始代码或下载源代码。如果您正在对其他人的代码进行逆向工程,那么这里没有任何帮助。
  • @Simon 老兄,在这种情况下,我是其他人,因为我只是尝试从我之前编写的模板“apk”文件创建一个应用程序生成器,并尝试从外部更改其数据并对其进行签名再次;)

标签: android android-manifest apk decode encode


【解决方案1】:

您可以再次使用 apktool 创建一个新的 APK 文件,包括您更改的 AndroidManifest.xml

首先,反编译APK文件:

java -jar apktool.jar decode app.apk app

然后修改app目录下你想要的文件,重新编译成新的APK:

java -jar apktool.jar build app app_new.apk

aapt 必须在我们的PATH 上,或者使用--aapt 选项来指定可执行文件的位置。否则在重建 APK 时 apktool 会失败。

注意:重建的APK既没有签名也没有zipalign,只是重新打包。请查看this website,了解有关签署和调整新 APK 的详细信息。

【讨论】:

  • 请注意,在 ApkTool 的 2.0.0 版本中,您要么不指定“app”目录,要么使用选项 -o 引入它
  • 有没有办法在不重新打包整个 APK 的情况下做到这一点?因为apktool经常反编译失败然后不加修改地重新编译。
  • 我收到Input file (app) was not found or was not readable. 错误。这是什么意思 ?如果我省略最后一个参数,我将无法再次构建 apk。
  • @expert 这是因为您正在指定目录应用程序,请从命令中省略“应用程序”。如果 apk 名称为 base.apk,Apktool 将自动创建一个名为 base 的文件夹。在较新版本的 apktool 上有一个选项 -o 用于输出目录。享受 =)
【解决方案2】:
Use appt for android-sdk (ex:- /build-tools/27.0.3/aapt )

./aapt d xmltree ./debug.apk  AndroidManifest.xml

N: android=http://schemas.android.com/apk/res/android
  E: manifest (line=1)
    A: android:versionCode(0x0101021b)=(type 0x10)0x1
    A: android:versionName(0x0101021c)="1.0" (Raw: "1.0")
    A: package="com.example.activity" (Raw: "com.example.activity")
    E: uses-sdk (line=6)
      A: android:minSdkVersion(0x0101020c)=(type 0x10)0x8
      A: android:targetSdkVersion(0x01010270)=(type 0x10)0xf
    E: application (line=8)
      A: android:label(0x01010001)=@0x7f030000
      A: android:icon(0x01010002)=@0x7f020000
      E: activity (line=10)
        A: android:label(0x01010001)=@0x7f030000
        A: android:name(0x01010003)=".SampleActivity" (Raw: ".SampleActivity")
        E: intent-filter (line=12)
          E: action (line=13)
            A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
          E: category (line=14)
            A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")

这个链接可能对http://elinux.org/Android_aapt有帮助

另一种工具“AXMLPrinter”google源码链接https://code.google.com/archive/p/android4me/downloads

java -jar ./AXMLPrinter2.jar ./debug.apk_FILES/AndroidManifest.xml

【讨论】:

猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 2019-06-02
相关资源
最近更新 更多