我尝试用apktool反编译apk,稍微修改一下,然后重新构建apk。
这是我尝试过的:
apktool d viber.apk
res/xml/android_backup_rules_api31.xml
和 res/xml/android_backup_rules.xml
apktool b viber
...并且步骤 3 无法继续,因为出现以下错误:
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1076: error: '@2114715648' is incompatible with attribute theme (attr) reference.
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1077: error: '@2114715648' is incompatible with attribute theme (attr) reference.
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1078: error: '@2114715648' is incompatible with attribute theme (attr) reference.
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1083: error: '@2114846720' is incompatible with attribute resource (attr) reference.
W: error: failed processing manifest.
brut.androlib.exceptions.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/var/folders/rt/1rw6721917xbtnmtznd812hx3873hr/T/brut_util_Jar_79656065772315295564857961138440605910.tmp, link, -o, /var/folders/rt/1rw6721917xbtnmtznd812hx3873hr/T/APKTOOL17872764973844080976.tmp, --package-id, 127, --min-sdk-version, 21, --target-sdk-version, 33, --version-code, 651217, --version-name, 21.3.2.0, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, --allow-reserved-package-id, --no-compile-sdk-metadata, -e, /var/folders/rt/1rw6721917xbtnmtznd812hx3873hr/T/APKTOOL13620375907382818829.tmp, -0, arsc, -I, /Users/<USERNAME>/Library/apktool/framework/1.apk, --manifest, /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml, /Users/<USERNAME>/Desktop/APK_RE/viber/build/resources.zip
...我检查了相关行(即 1076、1077、1078、1083),并注意到:
<activity android:exported="false" android:name="com.snap.camerakit.LegalPromptActivity" android:theme="@2114715648"/>
<activity android:exported="false" android:name="com.snap.camerakit.LegalPrePromptVariantGActivity" android:theme="@2114715648"/>
<activity android:exported="false" android:name="com.snap.camerakit.diagnostics.DiagnosticsExportActivity" android:theme="@2114715648"/>
...
<meta-data android:name="com.android.vending.splits" android:resource="@2114846720"/>
它们都带有@+数字字符串。我认为这是一些解码错误,所以我用 ClassyShark.jar 检查了原始 APK,它们看起来像:
<activity
theme='@res/0x7E0C0000'
name='com.snap.camerakit.LegalPromptActivity'
exported='false'>
</activity>
<activity
theme='@res/0x7E0C0000'
name='com.snap.camerakit.LegalPrePromptVariantGActivity'
exported='false'>
</activity>
<activity
theme='@res/0x7E0C0000'
name='com.snap.camerakit.diagnostics.DiagnosticsExportActivity'
exported='false'>
</activity>
...
<meta-data
name='com.android.vending.splits'
resource='@res/0x7E0E0000'>
</meta-data>
为什么这些字段用十六进制数字填充?有什么办法可以修复它们,或者我可以忽略它们吗? (实际上我并不关心这些功能,我只想做一些备份测试,正如你在步骤2中看到的)
罗伯特在评论中的回答有效:
删除关联属性
构建apk
使用一些zip实用程序(例如7z)来提取原始
AndroidManifest.xml
并在重新构建的apk中替换相同的文件