运行 bash 脚本中的 apktool

Running apktool in a bash script

我正在尝试编写一个 bash 脚本,使用 apktool 反编译多个 .apk 文件。每个 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 与 shell 脚本一起使用,但这会导致脚本挂起。但是,当我在命令行中将 sudo 与 apktool 一起使用时,它也会挂起。因此,我不确定将 sudo 与 apktool 一起使用是否可行。

感谢任何帮助,谢谢。

所以它看起来像这样 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 {} \;

另外,也许你的脚本可以用这个衬里代替:

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

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