引言
项目中为了更好的校验需登录的按钮操作,未登录就直接跳转到登录页面。
配置
单app项目
根目录build.gradle中添加 classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
对应app模块build.gradle 添加:
apply plugin: 'android-aspectjx'
implementation 'org.aspectj:aspectjrt:1.8.9'多模块项目配置:
根目录build.gradle中添加 classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
对应app模块build.gradle 添加:apply plugin: 'android-aspectjx'
Common模块build.gradle 添加:
apply plugin: 'android-aspectjx'
api 'org.aspectj:aspectjrt:1.8.9'编译报错的问题
> Failed to apply plugin 'android-aspectjx'.
> Build was configured to prefer settings repositories over project repositories but repository 'MavenLocal' was added by plugin 'android-aspectjx'解决方案:替换setting.gradle文件dependencyResolutionManagement配置中repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)为repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
Cause: zip file is empty解决方案:对应app模块android{}中添加配置
aspectjx {
// 排除一些第三方库的包名(和 AOP 有冲突)
exclude 'androidx', 'com.google',
'org.apache',
'org.jetbrains.kotlin',
"module-info", 'versions.9','kotlinx'
}插件版本不兼容
最初项目插件版本为
plugins {
id 'com.android.application' version '7.2.0' apply false
id 'com.android.library' version '7.2.0' apply false
}解决方案:将插件版本改为如下
plugins {
id 'com.android.application' version '7.1.3' apply false
id 'com.android.library' version '7.1.3' apply false
}登录拦截栗子
注解类CheckLogin
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class CheckLogin()AOP拦截类
@Aspect
class AuthorizeAspect {
//处理被注解@CheckLogin标记的所有方法
@Pointcut("execution(@com.xxx.common.aspectj.CheckLogin * *(..))")
fun pointCheckLogin(){}
@Around("pointCheckLogin()")
fun aroundCheckLogin(joinPoint: ProceedingJoinPoint){
val method = (joinPoint.signature as MethodSignature).method
if (method.isAnnotationPresent(CheckLogin::class.java) && isLogin != true) {
//未登录,跳转到登录页面
jumpLoginPage()
} else {
joinPoint.proceed()
}
}
}测试
/**
*跳转收藏页面方法执行时,需校验登录,未登录就直接跳转到登录页面
*/
@CheckLogin
fun jumpCollectPage() {}小结
仅记录在使用AspectJ中遇到的一些问题。
文章介绍了如何在Android项目中使用AspectJ进行登录拦截操作,包括配置gradle插件,处理编译错误,以及提供了一个登录拦截的AOP示例。在实现过程中遇到了如‘Failedtoapplyplugin’和‘zipfileisempty’等错误,并给出了相应的解决方案,最后展示了@CheckLogin注解和AuthorizeAspect切面类的代码示例。

2027

被折叠的 条评论
为什么被折叠?



