HujiangTechnology/gradle_plugin_android_aspectjx

一个必现的错误:Java+Kotlin找不到启动类

leeyushi opened this issue · 9 comments

我新建了一个Java空项目,没有编写aspectj语法,只是引入了依赖和插件,在只引入了apply plugin : 'android-aspectjx'插件时,它运行良好,在同时引入
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin : 'android-aspectjx'
后,它在运行时会奔溃,如果项目中有自定义的Application,那么会报找不到Application,如果项目中没有Application,那么项目中会报找不到启动类(XXXActivity),例如:
java.lang.ClassNotFoundException: Didn't find class "com.ideal.testaspectjx.MainActivity" on path: DexPathList
这里是我的配置项:
app.build.gradle
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin : 'android-aspectjx'
dependencies {
// AOP 插件库:https://mvnrepository.com/artifact/org.aspectj/aspectjrt
implementation 'org.aspectj:aspectjrt:1.9.6'
}
project.build.gradle
dependencies {
classpath "com.android.tools.build:gradle:7.0.4"
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionUrl=https://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

kotlin 降级到 1.4 尝试一下?

我也是这样的问题 降了也不管用

经过比对和测试,发现结合Koutlin使用会发生以下问题:
1 Kotlin的版本:
测试1.3.61是没有问题的,测试1.5.20会报 Cause: zip file is empty 错误。
2 AspectJ使用:
引入Kotlin使用,必须要给某个类声明@aspect注解,否则会报找不到启动类(如果项目中有自定义的Application,那么会报找不到Application,如果项目中没有Application,那么项目中会报找不到启动类XXXActivity)
该问题在纯Java项目中并不会出现(不给某个类声明@aspect注解也不会报错),Kotlin+Java结合使用会出现该情况。

经过比对和测试,发现结合Koutlin使用会发生以下问题: 1 Kotlin的版本: 测试1.3.61是没有问题的,测试1.5.20会报 Cause: zip file is empty 错误。 2 AspectJ使用: 引入Kotlin使用,必须要给某个类声明@aspect注解,否则会报找不到启动类(如果项目中有自定义的Application,那么会报找不到Application,如果项目中没有Application,那么项目中会报找不到启动类XXXActivity) 该问题在纯Java项目中并不会出现(不给某个类声明@aspect注解也不会报错),Kotlin+Java结合使用会出现该情况。

1.3.61就会找不到application

经过比对和测试,发现结合 Koutlin 使用会发生以下问题: 1 Kotlin 的版本: 测试 1.3.61 是没有问题的,测试 1.5.20 会报 原因:zip 文件为空错误。 2 AspectJ 使用:引入 Kotlin 使用,必须要给某个类声明@aspect注解,否则会报找不到启动类(如果项目有自定义的申请,那么就会找到申请,如果项目中没有申请,那么项目中会报不到启动类XXXActivity)该问题在纯Java项目中并不会出现(不给某类声明@aspect注解不会报错),Kotlin+Java结合使用会出现该情况。

1.3.61 可能找不到申请

新建一个类,给这个类添加上注解@aspect

这个怎么解决呢?
怎么给关了

我exclude下面这些就解决了:
aspectjx {
//排除所有package的class文件及库(jar文件)
exclude 'androidx'
exclude 'com.google'
exclude 'org.jetbrains.kotlin'
exclude 'com.squareup'
exclude 'android.support'
exclude 'versions.9'
exclude 'module-info'
}

我exclude下面这些就解决了: aspectjx { //排除所有package的class文件及库(jar文件) exclude 'androidx' exclude 'com.google' exclude 'org.jetbrains.kotlin' exclude 'com.squareup' exclude 'android.support' exclude 'versions.9' exclude 'module-info' }

还要加上协程的类,Aspectjx也会导致Kotlin协程相关类找不到

exclude 'kotlinx.coroutines'

@leeyushi 可以使用我fork过来维护的插件,这些问题都有修复。#332