在bash脚本中运行apktool

时间:2015-10-30 20:23:18

标签: android linux bash shell apktool

我正在尝试编写一个使用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*

我已将samples文件夹中所有文件的权限更改为所有用户的rw。我也尝试过使用sudo和shell脚本,但是这会导致脚本挂起。但是,当我在命令行中使用带有apktool的sudo时,它也会挂起。因此,我不确定使用带有apktool的sudo是否可行。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

所以看起来这个ls给你一个带有星号*的输出,附加在apk文件的末尾,因为该文件是可执行的。

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

这不是ls的默认行为,您可能是因为您有ls别名ls -F或类似名称。要绕过别名,请以这种方式重写行:

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

注意\我在那里添加了。

BTW,apk文件是可执行的,这是正常的吗?也许你可以删除可执行位:

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

此外,您的脚本可能会替换为这一个内容:

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

请注意,这不完全相同,因为它可能比两个目录更深入。如果您需要限制深度,也可以这样做,请参阅man find