gpt4 book ai didi

php - 如何从网络代码 (php) 运行 apktool

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:34 24 4
gpt4 key购买 nike

基本上,当用户上传 .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 上失败,我认为它找不到 framework/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)

谢谢!

最佳答案

终于找到了根本原因。

请注意这行输出(从命令行运行):I:从文件加载资源表:/home/tashax/apktool/framework/1.apk

当apktool在PHP中运行时,当前用户没有home目录,那么apktool将无法成功创建~/apktool/framework/1.apk。

检查apktool的选项。有一个选项可以更改框架文件目录: --帧路径 框架文件使用指定目录

因此,更改命令行并添加此选项:apktool 解码 --frame-path/tmp BluetoothChat.apk

现在可以了。

关于php - 如何从网络代码 (php) 运行 apktool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9561693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com