基本上,当用户上传.apk文件时,我需要对其进行解码,并从apk中的AndroidManifest.xml文件中提取一些信息。当我从命令行apktool decode BluetoothChat.apk运行这个命令时,一切都很正常。输出:
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Loading resource table from file: /home/tashax/apktool/framework/1.apk
I: Loaded.
I: Decoding file-resources...
I: Decoding values*/* XMLs...
I: Done.
I: Copying assets and libs...但是,如果我尝试使用php exec()函数从网页代码中执行它,我会得到一个错误。它在I: Loading resource table from file: /home/tashax/apktool/framework/1.apk上失败了,我想它找不到框架/1.apk文件。这似乎是设置的问题,有没有人做过类似的事情,或者知道我错过了什么?下面是从web运行apktool时出现的错误:
I: Baksmaling...
I: Loading resource table...
I: Loaded.
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionCode, value=0x00000001
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionName, value=0x0000000d
Exception in thread "main" java.lang.NullPointerException at java.io.Writer.write(Writer.java:157)
at brut.androlib.res.util.ExtMXSerializer.writeAttributeValue(ExtMXSerializer.java:38)
at org.xmlpull.mxp1_serializer.MXSerializer.attribute(MXSerializer.java:673)
at org.xmlpull.v1.wrapper.classic.XmlSerializerDelegate.attribute(XmlSerializerDelegate.java:106)
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.decode(XmlPullStreamDecoder.java:46)
at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:34)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:100)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:114)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:93)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:98)
at brut.apktool.Main.cmdDecode(Main.java:128)
at brut.apktool.Main.main(Main.java:65)谢谢!
发布于 2014-04-12 02:52:56
最后,我找到了根本原因。
请注意下面这行输出(从命令行运行):I:从文件加载资源表: /home/tashax/apktool/framework/1.apk
在PHP中运行apktool时,如果当前用户没有home目录,apktool将无法成功创建~/apktool/framework/1.apk。
检查apktool的选项。有一个更改框架文件目录的选项:--frame-path为框架文件使用指定的目录
因此,更改命令行并添加以下选项: apktool decode --frame-path /tmp BluetoothChat.apk
它现在起作用了。
发布于 2012-12-06 13:03:35
此错误
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionName, value=0x0000000d
意味着找不到该资源。你安装的框架不是来自那个ROM / Phone ( APK的来源),或者Apktool已经过时了。
Apktool v1.5.0支持最高版本的Android 4.1.x,而Android 4.2尚未支持。
https://stackoverflow.com/questions/9561693
复制相似问题