HujiangTechnology / gradle_plugin_android_aspectjx

A Android gradle plugin that effects AspectJ on Android project and can hook methods in Kotlin, aar and jar file.
Apache License 2.0
3.94k stars 570 forks source link

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

Open leeyushi opened 2 years ago

leeyushi commented 2 years ago

我新建了一个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

wille-89 commented 2 years ago

kotlin 降级到 1.4 尝试一下?

136617259 commented 2 years ago

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

leeyushi commented 2 years ago

经过比对和测试,发现结合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结合使用会出现该情况。

AnShiHui commented 2 years ago

经过比对和测试,发现结合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

leeyushi commented 2 years ago

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

1.3.61 可能找不到申请

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

carpediemvv commented 2 years ago

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

Kingwentao commented 2 years ago

我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' }

AlphaBoom commented 2 years ago

我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'
wurensen commented 2 years ago

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