您的位置:首页 > 移动开发 > Objective-C

android apktool 反编失败,提示brut.androlib.err.UndefinedResObject: resource spec:

2014-12-04 11:07 337 查看
D:\Java\apktool_2>apktool.bat d yangtao.apk -f

I: Using Apktool 2.0.0-RC2 on yangtao.apk

I: Loading resource table...

I: Loading resource table...

I: Decoding AndroidManifest.xml with resources...

I: Loading resource table from file: C:\Users\yiyuan.zhangyy\apktool\framework\1.apk

I: Regular manifest package...

I: Decoding file-resources...

W: Could not decode attr value, using undecoded value instead: ns=android, name=layout_toStartOf, value=0x7f0e0051

W: Could not decode attr value, using undecoded value instead: ns=android, name=layout_marginEnd, value=0x00000601

I: Decoding values */* XMLs...

Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec:
0x010103b7

at brut.androlib.res.data.ResPackage.getResSpec(ResPackage.java:59)

at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:58)

at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:54)

at brut.androlib.res.decoder.ResAttrDecoder.decode(ResAttrDecoder.java:36)

at brut.androlib.res.decoder.AXmlResourceParser.getAttributeValue(AXmlResourceParser.java:369)

at org.xmlpull.v1.wrapper.classic.XmlPullParserDelegate.getAttributeValue(XmlPullParserDelegate.java:69)

at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.writeStartTag(StaticXmlSerializerWrapper.java:267)

at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.event(StaticXmlSerializerWrapper.java:211)

at brut.androlib.res.decoder.XmlPullStreamDecoder$1.event(XmlPullStreamDecoder.java:83)

at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:141)

at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:33)

at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:107)

at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:91)

at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:322)

at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:123)

at brut.androlib.ApkDecoder.decode(ApkDecoder.java:102)

at brut.apktool.Main.cmdDecode(Main.java:170)

at brut.apktool.Main.main(Main.java:86)

问题分析:

从提示能看出来 layout_toStartOf layout_marginEnd 这两个货找不到。

一看名字就能明白,这两个是android 4.4左右为了适配RTL(right to left)布局上线的新配置。

猜测应该是和android platform什么配置有关。

验证

在D:\Java\adt-bundle-windows-x86_64-20130219\sdk\platforms\android-20> 这层目录下

aapt d resources android.jar | find "0x010103b7"

spec resource 0x010103b7 android:attr/layout_toStartOf: flags=0x40000000

resource 0x010103b7 android:attr/layout_toStartOf: <bag> (PUBLIC)

可以明确 0x010103b7 这个就是对应 layout_toStartOf

配了一圈path无果。(p.s. PATH有先后顺序,最高是当前目录,然后是按PATH从前向后。)

比如aapt,会优先用当前目录下面的。

从最新的build_tools下面找个了最新的粘贴过去也不行。

D:\Java\adt-bundle-windows-x86_64-20130219\sdk\build-tools\21.1.0>aapt v

Android Asset Packaging Tool, v0.2-1552913

猜测和framework-res.apk有关。

找了个5.0的 if 失败。

换了个思路。

配置user.home,也就是让apktool找最新的platform

--- 直接修改 apktool.bat

@echo off

set PATH=%CD%;%PATH%;

java -jar -Duser.language=en -Duser.home=%ANDROID_HOME%/build-tools/21.1.0 "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

问题解决。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐