在我的build.gradle文件中,我有一个自定义任务,它在将类文件转换为dex之前对字节码进行转换,代码如下:
task droidcook(type: JavaExec) {
main 'org.tsg.android.asm.Main'
}
afterEvaluate { project ->
android.applicationVariants.each { variant ->
variant.javaCompile.doLast {
project.tasks.droidcook.configure {
classpath variant.javaCompile.classpath
classpath "build/classes/" + variant.dirName
classpath sdk.dir + "/platforms/android-19/android.jar"
classpath "compile-libs/droidcook.jar"
args "build/classes/" + variant.dirName
args "com.example"
// args "-debug"
// args "-asmifier"
}
project.tasks.droidcook.execute()
}
}
}
上述的问题在于 classpath sdk.dir + ...
这一行代码,其中 sdk.dir
没有被适当地评估。为了让它正常工作,我目前必须将路径硬编码到 android.jar
中。如果你能回答一个适当的值来替换
android-19
,以便根据项目配置访问特定平台的 android.jar
,那就更好了 :D
afterEvaluate
之后实例化的,因此它不可用。因此,手动加载它可能是目前唯一的解决方案,这对于跨平台开发已经足够好了。 - dskinner