私はWindowsシステムを使用しているので、Linux / unixコマンドを実行するのに役立つcygwinをダウンロードしました。シェルスクリプト(スクリプトのインポート)を実行する必要があります。ここ)。
スクリプトは次のとおりです。
#!/bin/bash
cd $1
for filename in *.apk
do
unzip -d $filename.extract $filename META-INF/CERT.RSA
if [ -f $filename.extract/META-INF/CERT.RSA ]
then
mkdir `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23`
mv $filename `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23`/$filename
mv `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23`/`echo $filename | sed 's/\(.*\.\)apk/\1odex/'`
rm -rf $filename.extract
else
mkdir none
mv $filename none
mv `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` none
rm -rf $filename.extract
fi
done;
mkdir other
mv * other
mv other/b399 platform
mv other/f2a7 shared
mv other/f2b9 media
mv other/936e test
端末でコマンドを実行しましたが、sh cert.sh
次のエラーが発生します。
奇妙なことは、cert.sh -
スクリプトを実行するとapkが実行されて別のフォルダに分割されますが、シェルスクリプトを実行する正しいコマンドがあるため、正しく実行されるかどうかはわかりませんsh cert.sh
。
答え1
スクリプトを実行するには1つのパラメータが必要です。このパラメータは、そのパラメータが配置されているディレクトリです*.apk
。
パラメータはスクリプトから1行ずつ呼び出されcd $1
、これはシェルスクリプトでパラメータが呼び出される方法です。
次のようにスクリプトを再実行してみてください。sh cert.sh </path/where/apks/reside>
問題が解決するかどうか確認しますか?
また、既存のフォルダに関連するエラーを削除するには、ループの前に行をfor
追加してください。rm -rf other
rm -rf none
答え2
スクリプトは正常に実行されます。それ以外の場合、これらのエラーはすべて生成されません。
次の質問があります。
1) ...\test1 ディレクトリに .apk サフィックスがあるファイルがなく、スクリプトがこれらのエラーを処理するように作成されていません。 *.odexも同様です。
2_スクリプトはnone
ディレクトリを作成できると予想していますother
が、すでに存在し(ディレクトリではなくファイルのように見えます)、それを処理する方法がわからないため、エラーを印刷します。
残りのエラーは上記に関連しています。
提案:
1) *.apk ファイルがない場合は、if
文全体をコメントアウトしてください。それ以外の場合は、そのエントリを含むディレクトリに移動します。
none
2) 不要なother
ファイルを削除してください。ファイルが残っている場合、スクリプトはこれらのディレクトリを生成しません。