如何在Android项目中使用Javassist?

时间:2017-06-07 06:04:47

标签: android javassist

我试图在我的Android项目中使用Javassist,但它没有用。每当我从默认的ClassPool中获得一个CtClass时,就会抛出一个NotFoundException。我的意思是Javassist成功包含在内并且代码正常但是当我运行我的程序并尝试使用下面的代码获取CtClass时,抛出了NotFoundException。

ClassPool pool = ClassPool.getDefault();
pool.importPackage("com.nd.android");
try {
    CtClass ctClass = pool.get("com.nd.android.aoptest.Test");
} catch (NotFoundException e) {
    //NotFoundException always thrown
    e.printStackTrace();
}

我被告知Javassist只能在Java项目中使用,Android还有其他版本吗?或者任何人都可以告诉我如何处理这个问题?

我的Gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.nd.android.aoptest"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile 'org.javassist:javassist:3.20.0-GA'
}

1 个答案:

答案 0 :(得分:1)

Java运行Java字节代码,而Android运行其cutom Dalvik字节代码格式。因此,您不能在Android上使用Javassist。

相反,您可以将Byte Buddy的子集与Byte Buddy Android一起使用或使用dexmaker。