2

apktool を使用して複数の .apk ファイルを逆コンパイルする bash スクリプトを作成しようとしています。各 apk ファイルは、サンプル フォルダーのサブディレクトリにあります。

#!bin/bash


for item in $(ls samples);
do
        for apk in $(ls "samples/$item");
        do 
            echo ./apktool/apktool d "./samples/$item$apk" 
            $(./apktool/apktool d "./samples/$item$apk")
        done    
done

スクリプトを実行すると、次の出力が得られます。

./apktool/apktool d ./samples/ADRD/53dc.apk*
Input file (./samples/ADRD/53dc.apk*) was not found or was not readable.

入力ファイルのエラー メッセージは、apktool がファイルを見つけられない場合の標準です。ただし、ターミナルで次のコマンドを実行すると、apktool は正しく機能します。

./apktool/apktool d ./samples/ADRD/53dc.apk*

すべてのユーザーに対して、サンプル フォルダーにあるすべてのファイルのアクセス許可を rw に変更しました。また、シェル スクリプトで sudo を使用してみましたが、これによりスクリプトがハングします。ただし、コマンド ラインで apktool を使用して sudo を使用すると、ハングします。したがって、apktool で sudo を使用できるかどうかはわかりません。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

2

lsファイルが実行可能であるため、これにより、apk ファイル名の末尾にアスタリスク * が追加された出力が得られるように見えます。

    for apk in $(ls "samples/$item");

これは のデフォルトの動作ではありません。これはlsおそらく、エイリアスまたは類似のものlsを使用しているために発生しています。ls -Fエイリアスをバイパスするには、次のように行を書き換えます。

    for apk in $(\ls "samples/$item");

そこに追加した \ に注目してください。

ところで、apk ファイルが実行可能であることは正常ですか? おそらく、実行可能ビットを削除できます。

find samples -name '*.apk' -exec chmod -x {} \;

また、スクリプトを次の 1 つのライナーに置き換えることもできます。

find samples -name '*.apk' -exec ./apktool/apktool d {} \;

2 つのディレクトリよりも深くなる可能性があるため、これはまったく同じではありません。深さを制限する必要がある場合は、それも可能です。man find

于 2015-10-31T07:45:23.067 に答える