2017-04-10 8 views
0

すべての方法ここで実行は、タスクに失敗しました「:アプリ:transformClassesWithDexForDebug」リターンコード1 DEXプロセスのための

クラスを注入するASMを使用しては私のコードです:

すべてのクラスに

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) 
を取得するAPIを変換します

ASM方法ニン

@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は、単に1つの方法を変更した場合、成功

、二つ以上の方法を変更フェイル、コードの上に以下の二つの方法

を変更するには、コンソールから出力される。

: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

この問題を解決するにはどうすればよいですか? :(

+0

アドオンをsovledことMethodVisitorコードを変更します。このようなグラデルル 'defaultConfig { multiDexEnabled true }' コンパイル 'com.android.support:multidex:1.0.1' – ashish

+0

unusedful、おそらく変換できませんmultidex、新しいエラー: ':app:transformClassesWithMultidexlistForDebug'タスクの実行に失敗しました。 > proguard.KeepClassSpecification。 (ZZZZZZLproguard/ClassSpecification;)V –

答えて

0

は、COM/bigocto/hacksourcecode/JavaInjectTest

public class JavaInjectTest { 

    public static void test1(){ 
    //Do something what you want 
    } 
    public void test2(){ 
    System.out.println("I am test 2"); 
    } 
} 

クラスを作成します

@Override 
public void visitCode() { 
    //add start 

    this.visitMethodInsn(INVOKESTATIC, "com/bigocto/hacksourcecode/JavaInjectTest", "test1", "()V", false); 

    super.visitCode(); 
} 

問題が!!ビルドのデフォルトの設定ファイルに真multiDexEnabled

関連する問題