【发布时间】:2015-03-31 16:34:56
【问题描述】:
我是 AspectJ 的新手,我们正在努力将最初使用 Eclipse 编写的第三方应用程序迁移到使用 Android Studio 1.1.0 和 Gradle 来代替。我们已经获取了这个应用程序需要的一个外部库,并在项目中创建了一个库模块,并且这个库有一个 AspectJ .aj 文件,我们需要编译它并与主应用程序一起工作以用于字段-水平可观察模式。使用 here 找到的插件,我已经能够将 .aj 文件编译成 .class 文件,通过查看 intermediates 文件夹进行验证。
问题出现在“编织”步骤,该代码应该被注入到必要类的字节码中。这似乎没有发生,因为应该在字段更改时通知的侦听器没有发生。以下是我的构建文件。
项目 build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
classpath 'com.uphyca.gradle:gradle-android-aspectj-plugin:0.9.12'
}
}
allprojects {
repositories {
jcenter()
}
}
应用模块 build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 14
targetSdkVersion 19
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile project(':blahblah')
compile 'com.android.support:support-v4:19.1.0'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.google.android.gms:play-services:6.1.11'
compile files('libs/commons-lang3-3.3.2.jar')
}
'blahblah' 库模块 build.gradle:
import com.android.build.gradle.LibraryPlugin
import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Main
apply plugin: 'com.android.library'
apply plugin: 'android-aspectj'
def gsonVersion = '2.2.4'
def aspectjVersion = '1.8.5'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "com.google.code.gson:gson:${gsonVersion}"
compile "org.aspectj:aspectjrt:${aspectjVersion}"
}
android {
compileSdkVersion 19
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
android.libraryVariants.all { variant ->
LibraryPlugin plugin = project.plugins.getPlugin(LibraryPlugin)
variant.javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-1.5",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
"-bootclasspath", plugin.project.android.bootClasspath.join(
File.pathSeparator)]
MessageHandler handler = new MessageHandler(true);
new Main().run(args, handler)
def log = project.logger
for (IMessage message : handler.getMessages(null, true)) {
switch (message.getKind()) {
case IMessage.ABORT:
case IMessage.ERROR:
case IMessage.FAIL:
log.error message.message, message.thrown
break;
case IMessage.WARNING:
case IMessage.INFO:
log.info message.message, message.thrown
break;
case IMessage.DEBUG:
log.debug message.message, message.thrown
break;
}
}
}
}
我错过了什么?
【问题讨论】:
-
你可以看看my plugin :) 希望对你有帮助!现在它解决了几乎所有关于在 Android 上使用 aspectj 的现有愿望。
标签: android android-studio android-gradle-plugin aspectj build.gradle