Android Studio 2.1 Java8 支持Xposed开发脚本

2016年05月10日 4622点热度 0人点赞 1条评论

说明

此BUG已经在Android Studio 2.2中修复!!!用前请看好版本。

Android Studio 2.1 之后就支持JAVA8的特性,使用的编译器为jack,但是喜欢折腾的我第一时间升级了Android Studio 2.1用上了JAVA8的特性。在使用了一段时间却发现jack编译器在编译的时候有一个严重性的问题,那就是在使用provided files编译选项的时候编译器提示找到这个类。这样就导致了使用jack编译器编译出来的xposed框架无法正常的运行。

经过出墙Google研究了一段时间的jack编译器的过程,发现了一点小小的东西,我这里也就不多说了,因为我也是简单的看了一下说出来可能是错的,免的对大家造成误解。我这里就直接写出我这边的解决方法。

解决

修改原来的provided filescompile 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给更正。

Sollyu

保持饥渴的专注,追求最佳的品质