- 從官網(wǎng)下apktool.jar
- 把依賴加入gradle
dependencies 下添加
compile files('tool/apktool.jar')
但是apktool和springboot 里面的依賴沖突了 報(bào) java.lang.NoSuchMethodError
從報(bào)錯(cuò)種找到相關(guān)包:
- org.yaml.snakeyaml
springboot 下是1.25
apktool 下是 1.12
好吧 - 要么編譯springboot 要么編譯 apktool
- 本著新版本應(yīng)該會向老版本兼容的原則 嘗試把 apktool 的 snakeyaml 從1.12提升到1.25
編譯 apktool
- github 下載源碼
參考編譯說明:
https://ibotpeaches.github.io/Apktool/build/ - 修改 build.gradle Line:122 切換版本
snakeyaml: 'org.yaml:snakeyaml:1.12:android',
修改為
snakeyaml: 'org.yaml:snakeyaml:1.25:android',
- gradlew.bat 秒閃后退出 看不清報(bào)錯(cuò)信息
修改gradlew.bat 在 :execute 后加 pause 看報(bào)錯(cuò)信息
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
pause
+看到原因 Unsupported class file major version 57
好吧 jdk13 不支持 換jdk 8
重新編譯成功
- 文件在: brut.apktool/apktool-cli, 沒看到這句話 糾結(jié)了1kb好久
After build completes you should have a jar file at: ./brut.apktool/apktool-cli/build/libs/apktool-xxxxx.jar
import brut.androlib.Androlib;
import brut.androlib.AndrolibException;
import brut.androlib.ApkDecoder;
import brut.common.BrutException;
import brut.directory.DirectoryException;
import java.io.File;
import java.io.IOException;
public class ApkToolKit {
static String rootPath = GetPath.getRootDir();
static String appDir = rootPath + "apk/app";
static String appDir2 = rootPath + "apk/app2";
static String outApk = rootPath + "apk/app.apk";
public static void Build(){
Androlib instance = new Androlib();
try {
instance.build(new File(appDir) , new File(outApk));
} catch (BrutException e) {
e.printStackTrace();
}
System.out.println("buildApk done");
}
public static void Decde(){
try {
File inFile = new File(outApk);
ApkDecoder decoder = new ApkDecoder();
decoder.setOutDir(new File(appDir2));
decoder.setApkFile(inFile);
decoder.decode();
} catch (IOException|AndrolibException | DirectoryException e) {
e.printStackTrace();
}
}
}