前提
image.pngAndroid中控制java编译有两个参数:
- sourceCompatibility:编译java源文件的jdk版本,默认当前环境变量对应版本
- targetCompatibility:用于生成类的Java版本
两者关系:
targetCompatibility >= sourceCompatibility , 在Android中保持两者一致就行
两种配置方法
- 导入AS图形化操作(以1.8为例)
- app/build.gradle中手动配置 (以1.8为例)
android {
···
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
注意
Cordova,React-native等跨应用平台修改了Android结构,可能需要修改多处
举例
遇到的问题
BUILD FAILED
Total time: 1 mins 18.097 secs
(node:98864) UnhandledPromiseRejectionWarning: Error: /Users/josh/Desktop/ws/josh/cordova/jm/platforms/android/gradlew: Command failed with exit code 1 Error output:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
/Users/josh/Desktop/ws/josh/cordova/jm/platforms/android/src/cn/jiguang/cordova/im/JMessagePlugin.java:108: error: diamond operator is not supported in -source 1.6
groupApprovalEventHashMap = new HashMap<>();
^
(use -source 7 or higher to enable diamond operator)
1 error
FAILURE: Build failed with an exception.
问题分析
HashMap<String, GroupApprovalEvent> groupApprovalEventHashMap
= new HashMap<>();
这样的写法从jdk1.7以后才支持,在jdk1.6下需要写成
HashMap<String, GroupApprovalEvent> groupApprovalEventHashMap
= new HashMap<String, GroupApprovalEvent>();
而CordovaAndroid 6.3.0中默认配置了我项目的编译java源文件的jdk版本为1.6,所以导致编译失败
问题解决
导入AS同时将android和CordovaLib模块的编译版本设置为1.8,问题解决
image.png