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

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

问题解决。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值