首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从webcode运行apktool (php)

如何从webcode运行apktool (php)
EN

Stack Overflow用户
提问于 2012-03-05 12:36:02
回答 2查看 1.9K关注 0票数 3

基本上,当用户上传.apk文件时,我需要对其进行解码,并从apk中的AndroidManifest.xml文件中提取一些信息。当我从命令行apktool decode BluetoothChat.apk运行这个命令时,一切都很正常。输出:

代码语言:javascript
复制
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时出现的错误:

代码语言:javascript
复制
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)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

它现在起作用了。

票数 2
EN

Stack Overflow用户

发布于 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尚未支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9561693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档