Android Kotlin 集成aspectj

Kotlin 集成aspectj,會有很多版本問題,很多三方庫也不再更新維護(hù),實測版本號依賴如下,可以正常運(yùn)行

根目錄

buildscript {
    ext.kotlin_version = '1.7.20'
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'org.aspectj:aspectjtools:1.9.8'
        classpath 'org.aspectj:aspectjweaver:1.9.8'
        classpath 'com.android.tools.build:gradle:7.3.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

module

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-parcelize'
    id 'kotlin-kapt'
}
apply from: "../aspectj.gradle"
implementation 'org.aspectj:aspectjrt:1.9.8'

aspectj.gradle文件如下

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
        google()
        mavenCentral()
    }

}

// app 和 lib 屬性不同
def variants = null
if (project.android.hasProperty("applicationVariants")) {
    variants = project.android.applicationVariants
} else if (project.android.hasProperty("libraryVariants")) {
    variants = project.android.libraryVariants
}

variants.all { variant ->
    variant.outputs.all { output ->
        def fullName = ""
        output.name.tokenize('-').eachWithIndex { token, index ->
            fullName = fullName + (index == 0 ? token : token.capitalize())
        }

        JavaCompile javaCompile = variant.javaCompileProvider.get()
        javaCompile.doLast {
            String[] javaArgs = ["-showWeaveInfo",
                                 "-1.8",
                                 "-inpath", javaCompile.destinationDir.toString(),
                                 "-aspectpath", javaCompile.classpath.asPath,
                                 "-d", javaCompile.destinationDir.toString(),
                                 "-classpath", javaCompile.classpath.asPath,
                                 "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
            println "ajc javaArgs: " + Arrays.toString(javaArgs)
            String[] kotlinArgs = ["-showWeaveInfo",
                                   "-1.8",
                                   "-inpath", project.buildDir.path + "/tmp/kotlin-classes/" + fullName,
                                   "-aspectpath", javaCompile.classpath.asPath,
                                   "-d", project.buildDir.path + "/tmp/kotlin-classes/" + fullName,
                                   "-classpath", javaCompile.classpath.asPath,
                                   "-bootclasspath", project.android.bootClasspath.join(
                    File.pathSeparator)]
            println "ajc kotlinArgs: " + Arrays.toString(kotlinArgs)

            def wv = configurations.create("weaving")
            dependencies {
                weaving 'org.aspectj:aspectjtools:1.9.8'
            }
            try {
                javaexec {
                    classpath = wv
                    main = "org.aspectj.tools.ajc.Main"
                    args javaArgs
                }
            } catch (Exception ignored) {
            }
            try {
                javaexec {
                    classpath = wv
                    main = "org.aspectj.tools.ajc.Main"
                    args kotlinArgs
                }
            } catch (Exception ignored) {
            }
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容