批量APK文件odex化脚本优化

4次阅读
没有评论

解决方案:批量处理APK文件并进行odex化

根据用户的需求,我们需要解决两个主要问题:
1. 将*.apk.odex重命名成普通的*.odex文件。
2. 减少脚本复杂度,使流程更简洁。

一、简化脚本以直接生成所需命名格式的.odex文件

用户原脚本如下:

dexopt-wrapper $i1 ${i1}.apk.odex
mv $SYSAPP*.apk.odex $SYSAPP/*.odex
mv $SYSPRIVAPP*.apk.odex $SYSPRIVAPP/*.odex

我们可以结合使用dexopt-wrapper命令以直接生成所需的.odex文件,同时避免多余的mv操作。通过调整脚本如下:

#!/bin/sh

SYSAPP=/mnt/extSdCard/FilesToOdex/system/app/
SYSPRIVAPP=/mnt/extSdCard/FilesToOdex/system/priv-app/

for i1 in $SYSAPP*.apk $SYSPRIVAPP*.apk; do
    echo "Odexing $i1..."
    dexopt-wrapper "$i1" "${i1%.*}.odex"
done

这里的关键在于${i1%.*}这部分,%.*表示去掉最后一个扩展名(包括.),剩下的就是原本文件的名字。

二、处理APK文件

如果还需要实现从.apk中移除classes.dex的功能(虽然这可能破坏.apk的完整性和信任度,因此不推荐在实际环境中操作原始.apk文件)。可以手动解压和重组.apk,但是可以通过修改脚本进行批量处理:

#!/bin/sh

SYSAPP=/mnt/extSdCard/FilesToOdex/system/app/
SYSPRIVAPP=/mnt/extSdCard/FilesToOdex/system/priv-app/

# 解压操作(示例简化逻辑,实际应用中需具体实现)
unzip -o "$i1" classes.dex -d "$(dirname "$i1")"

for i1 in $SYSAPP*.apk $SYSPRIVAPP*.apk; do
    echo "Odexing $i1..."
    dexopt-wrapper "$i1" "${i1%.*}.odex"
done

# 重新打包操作(示例简化逻辑,具体实现需自行调试)
for i1 in $(find $SYSAPP -name "*.apk" -o find $SYSPRIVAPP -name "*.apk"); do
    output_file="${i1%.apk}-no-classes.dex.apk"
    # 假设这里已经将原来的classes.dex文件删除或者处理了...
    zip -0 "$output_file" $(find "$i1"* | grep -v "classes.dex") $i1/classes/* > /dev/null 2>&1
done

这段脚本先通过解压操作提取出classes.dex,之后对已完成odex化的apk文件进行处理并重新打包。注意这里仅是一个简化示例,实际应用中需要考虑更多细节和边缘情况。

三、最终的脚本整合

综合上述两点,一个简明且功能完整的脚本如下:

#!/bin/sh

SYSAPP=/mnt/extSdCard/FilesToOdex/system/app/
SYSPRIVAPP=/mnt/extSdCard/FilesToOdex/system/priv-app/

# 解压操作(实际应用需自行实现细节)
unzip -o "$1" classes.dex -d "$(dirname "$1")"

for i1 in $SYSAPP*.apk $SYSPRIVAPP*.apk; do
    echo "Odexing $i1..."
    dexopt-wrapper "$i1" "${i1%.*}.odex"
done

# 重新打包操作(实际应用需自行实现细节)
for i1 in $(find $SYSAPP -name "*.apk" -o find $SYSPRIVAPP -name "*.apk"); do
    output_file="${i1%.apk}-no-classes.dex.apk"
    zip -0 "$output_file" $(find "$i1"* | grep -v "classes.dex") $i1/classes/* > /dev/null 2>&1
done

echo "All done!"

这个脚本简化了对.apk文件的操作,确保在odex化处理过程中仅保留必要的内容。

正文完