как запустить apktool из веб-кода (php) - PullRequest
3 голосов
/ 05 марта 2012

По сути, когда пользователь загружает файл .apk, мне нужно его декодировать и извлечь некоторую информацию из файла AndroidManifest.xml внутри apk.Когда я запускаю эту команду из командной строки 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.Кажется, это проблема установки, кто-нибудь делал что-то подобное или знает, что мне не хватает?Вот ошибки из 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)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 апреля 2014

Наконец, я нашел основную причину.

Обратите внимание на эту строку вывода (запускается из командной строки): I: загрузка таблицы ресурсов из файла: /home/tashax/apktool/framework/1.apk

Когда apktool запущен в PHP, у текущего пользователя нет домашнего каталога, тогда apktool не сможет успешно создать ~ / apktool / framework / 1.apk.

Проверьте параметры apktool.Существует возможность изменить каталог файлов инфраструктуры: --frame-path Использовать указанный каталог для файлов инфраструктуры

Итак, измените командную строку и добавьте эту опцию: apktool decode --frame-path / tmp BluetoothChat.apk

Теперь работает.

0 голосов
/ 06 декабря 2012

Эта ошибка

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

Означает, что ресурс не найден.Установленные вами фреймворки либо не из этого ПЗУ / телефона (откуда бы ни появился APK), либо Apktool устарел.

Apktool v1.5.0 поддерживает до Android 4.1.xAndroid 4.2 пока не поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...