Apktool 解包资源引用偏移的问题
Apktool(v2.0.0rc3) 解由最新的build-tools(v21.x) 所编译的Apk,如果其引用了Android Lollipop的Material主题,会出现资源引用偏移的情况。
如 values-v21
文件夹下的styles.xml
中的主题原来是:
<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light">
解包后却变成
<style name="AppBaseTheme" parent="@android:style/Widget.Holo.DateTimePicker">
##原因
Apktool decode 某个Apk首先需要加载 package
为 android
(其package id一般为0x01[1]) 的资源映射表(Resource Table),这就是第一次运行Apktool会安装内置资源包resources.arsc
到xxx/apktool/framework/1.apk
的原因[2]。
可想而知,如果这个资源包没有及时升级,自然就会导致资源引用偏移甚至解包失败:
Exception in thread "main" brut.androlib.err.UndefinedResObject:resource spec: 0x01...
##解决办法
删除这个framework资源包让它自动安装最新的即可。
路径一般是
$HOME/apktool/framework/1.apk
或者(OSX)
$HOME/Library/apktool/framework/1.apk
- How aapt mapping resource ID: http://stackoverflow.com/a/6646113/2236255
- Why need framework: https://code.google.com/p/android-apktool/wiki/FrameworkFiles