0
에 대한 클래스 모든 방법을 여기에실행은 작업 실패 ': 응용 프로그램 : transformClassesWithDexForDebug'리턴 코드 1 덱스 과정
를 주입 내 코드은 ASM됩니다 사용 : API는 모든 클래스
def cacheFile = new File(file.parent, file.name + ".cache");
fis = new FileInputStream(file)
fos = new FileOutputStream(cacheFile)
println "injectFile: ${file.path}"
byte[] bytes = hackClass(file, null, false, fis);
fos.write(bytes)
if (file.exists()) {
file.delete()
}
cacheFile.renameTo(file)
을 얻을 변환
을
어셈블러에 방법 VISITER
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor mv = null;
if(name.equals("onCreate") || name.equals("onPause")){
System.out.println(file.getName() + "Method name : " + name);
mv = cv.visitMethod(access, name, desc, signature, exceptions);
return new TraceMethodVisitor(name, mv);
}
if (cv != null){
mv = cv.visitMethod(access, name, desc, signature, exceptions);
}
return mv;
}
MethodVisitor 코드 :
@Override
public void visitCode() {
//add start
mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("========start=========");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
mv.visitLdcInsn("Hi");
mv.visitLdcInsn("hello world");
mv.visitMethodInsn(INVOKEVIRTUAL, "android/util/Log", "v", "(Ljava/lang/String;Ljava/lang/String;)I", false);
super.visitCode();
}
MethodVisitor 그냥 하나의 방법,
두 개 이상의 방법을 수정 성공을 수정하는 경우는 두 가지 방법 아래
콘솔에서 출력 수정 코드 위, 실패 ::app:transformClassesWithDexForDebug
Uncaught translation error: com.android.dx.cf.code.SimException:stack: overflow
Uncaught translation error: com.android.dx.cf.code.SimException:stack: overflow
2 errors; aborting
:app:transformClassesWithDexForDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformClassesWithDexForDebug'.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Return code 1 for dex process
어떻게이 문제를 해결할 수 있습니까? :(
추가 빌드의 기본 설정 파일에서 진정한 multiDexEnabled 수정 MethodVisitor 코드를 클래스 COM/bigocto/hacksourcecode/JavaInjectTest
을 만듭니다. 이 같은 gradle은 'defaultConfig { multiDexEnabled true } ' 그리고 당신은 컴파일 파일을 추가 할 수 있습니다 : 'com.android.support:multidex:1.0.1' – ashish
unuseful, 아마도 multidex, 새로운 오류를 사용할 수 없습니다 컴파일 : ': app : transformClassesWithMultidexlistForDebug'작업에 대한 실행이 실패했습니다. > proguard.KeepClassSpecification. (ZZZZZZLproguard/ClassSpecification;) V –