Как использовать Javassist в Android-проекте?

Я пытался использовать Javassist в своем Android-проекте, но это не сработало. Всякий раз, когда я получал CtClass из ClassPool по умолчанию, генерировалось 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'
}

person uncle c    schedule 07.06.2017    source источник
comment
Вместо этого используйте веб-просмотр   -  person Amy    schedule 07.06.2017
comment
Включили ли вы банку в свой проект?   -  person Veneet Reddy    schedule 07.06.2017
comment
Android Studio, gradle, зависимости {compile 'org.javassist: javassist: 3.20.0-GA'} ·   -  person uncle c    schedule 07.06.2017


Ответы (1)


Javassist работает с байтовым кодом Java, в то время как Android использует собственный формат байтового кода Dalvik. Поэтому вы не можете использовать Javassist на Android.

Вместо этого вы можете использовать подмножество Byte Buddy с Byte Buddy Android или использовать dexmaker.

person Rafael Winterhalter    schedule 10.06.2017