说明
此BUG已经在
Android Studio 2.2
中修复!!!用前请看好版本。
Android Studio 2.1 之后就支持JAVA8的特性,使用的编译器为jack,但是喜欢折腾的我第一时间升级了Android Studio 2.1用上了JAVA8的特性。在使用了一段时间却发现jack编译器在编译的时候有一个严重性的问题,那就是在使用provided files
编译选项的时候编译器提示找到这个类。这样就导致了使用jack编译器编译出来的xposed框架无法正常的运行。
经过出墙Google研究了一段时间的jack编译器的过程,发现了一点小小的东西,我这里也就不多说了,因为我也是简单的看了一下说出来可能是错的,免的对大家造成误解。我这里就直接写出我这边的解决方法。
解决
修改原来的provided files
为compile files
添加下面的代码
android.applicationVariants.all { variant ->
// 修改编译出来最终的名称
variant.outputs.each { output ->
//noinspection GroovyAssignabilityCheck
output.outputFile = new File(output.outputFile.parent, defaultConfig.applicationId + "-" + buildType.name + "-v" + defaultConfig.versionName + "-" + defaultConfig.versionCode + "-" + ".apk");
}
// 修正xposed的依赖关系
//noinspection GroovyAssignabilityCheck
task "fixJill${variant.name.capitalize()}RuntimeLibraries" << {
File xposedBridgeFile = null;
copy {
from project.buildDir.toString() + '/intermediates/jill/' + dirName + '/packaged/'
into project.buildDir.toString() + '/intermediates/jill/' + dirName + '/runtime/'
include { details ->
if (details.file.name.startsWith('XposedBridgeApi')){
xposedBridgeFile = details.file
return true
}
}
}
delete xposedBridgeFile.absolutePath
}
// 插入任务顺序
tasks.whenTaskAdded { task ->
android.applicationVariants.all { variant ->
if (task.name == "jill${variant.name.capitalize()}RuntimeLibraries".toString()) {
task.finalizedBy "fixJill${variant.name.capitalize()}RuntimeLibraries"
}
}
}
结束
这样就可以正常的使用JAVA8特性并可以正常编译出XPOSED的插件,希望GOOGLE后面会把这个BUG给更正。