2012-03-05 5 views
3

ユーザーが.apkファイルをアップロードするとき、私はそれをデコードし、apk内のAndroidManifest.xmlファイルから情報を抽出する必要があります。 コマンドラインapktool decode BluetoothChat.apkからこのコマンドを実行すると、すべて問題ありません。 出力:私はPHP exec()機能を使用してWebコードからそれを実行しようとした場合webcode(php)からapktoolを実行する方法

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... 

はしかし、私はエラーを取得します。それはI: Loading resource table from file: /home/tashax/apktool/framework/1.apkで失敗します、私はフレームワーク/ 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) 

ありがとう!

+0

ウェブからこれでいくつかの環境変数の設定が不足していると思われます – maxjackie

+0

私はまだこの解決策を見つけることができません。 – t0x13

+0

は[AXMLPrinter2.jar](https://code.google.com/p /android4me/downloads/detail?name=AXMLPrinter2.jar&can=2&q=)AndroidManifest.xmlファイルを読むか、ダンプバッジコマンドをダンプできます。 apktoolでは、通常のユーザーとして実行する必要があります。 – t0x13

答えて

2

最後に、根本的な原因が見つかりました。

(コマンドラインから実行)出力のこの行を注意してください: I:ファイルからの読み込みリソーステーブル:apktoolはPHPで実行された場合

を/home/tashax/apktool/framework/1.apk、現在のユーザーにホームディレクトリがない場合、apktoolは〜/ apktool/framework/1.apkを正常に作成できません。

apktoolのオプションを確認してください。フレームワークファイルのディレクトリを変更するオプションがあります: --frame-pathは コマンドラインを変更し、このオプションを追加し、そこで、フレームワークファイル

に指定したディレクトリを使用します。 apktoolデコード--frameパスを/ tmp BluetoothChat .apk

これで動作します。

+0

ホームディレクトリを持たないwebuserとは関係がありますが、その周りには道がないと結論づけました。あなたがそれを理解したことは驚くべきことです。仕事を終わらせるために別のツールを使い終わったにもかかわらず、これは次回に役立つ、共有のおかげです! – t0x13

+0

デフォルトでは、apktoolはb [uild]モードで--frame-pathオプションを持っていません。 apktoolを使用してPHPでAPKを再構築する場合は、https://code.google.com/p/android-apktool/issues/detail?id=427を参照してください。 connor.tumblesonはこの問題の完璧な修正を提供しました。 –

0

このエラー

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

リソースが見つからなかったことを意味します。あなたがインストールしたフレームワークは、そのROM /電話からではありません(APKがどこから由来したか)、またはApktoolが古くなっています。

Apktool v1.5.0はAndroid 4.1.xまで、Android 4.2はまだサポートされていません。

+0

まあ、私は同じ問題があります。 apktoolはPHPからは動作しませんが、apktoolを実行するのとまったく同じコード行が端末の下で動作します。 –

関連する問題