android 因java版本产生的编译错误

来源:互联网 发布:2年java开发工程师简历 编辑:程序博客网 时间:2024/05/23 23:56

由于公司平台多,android版本从4.4到7.0都有,而这些版本所需要的java 版本也不相同.
在android 7.0之后,编译时使用的java版本是openjdk java 8 ,而之前的版本都是使用oracle的版本,不知道是不是因为版权问题。

android 4.4的版本编译要使用oracle java 6 ,即1.6的版本。
android 6.0 的版本编译要使用oracle java 7 ,即1.7的版本。
android 7.0 的版本编译要使用openjdk java 8 ,即1.8的版本。

电脑上安装了多个java版本,切换java版本的指令如下:

1、sudo update-alternatives –config java

有 6 个候选项可用于替换 java (提供 /usr/bin/java)。

选择 路径 优先级 状态

0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 自动模式
1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 手动模式
* 2 /usr/lib/jvm/java-6-oracle/jre/bin/java 1062 手动模式
3 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 手动模式
4 /usr/lib/jvm/java-7-oracle/jre/bin/java 1063 手动模式
5 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1069 手动模式
6 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 手动模式

2、sudo update-alternatives –config javac

有 6 个候选项可用于替换 javac (提供 /usr/bin/javac)。

选择 路径 优先级 状态

0 /usr/lib/jvm/java-8-oracle/bin/javac 1081 自动模式
1 /usr/lib/jvm/java-6-openjdk-amd64/bin/javac 1061 手动模式
* 2 /usr/lib/jvm/java-6-oracle/bin/javac 1062 手动模式
3 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1051 手动模式
4 /usr/lib/jvm/java-7-oracle/bin/javac 1063 手动模式
5 /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1069 手动模式
6 /usr/lib/jvm/java-8-oracle/bin/javac 1081 手动模式

今天遇到了另一个编译错误,也是由于java的版本引起的:

target thumb C++: content_content_common_gyp <= external/chromium_org/content/common/android/command_line.cc
target thumb C++: content_content_common_gyp <= external/chromium_org/content/common/android/common_jni_registrar.cc
target thumb C++: content_content_common_gyp <= external/chromium_org/content/common/android/device_telephony_info.cc
target thumb C++: content_content_common_gyp <= external/chromium_org/content/common/android/hash_set.cc
In file included from external/chromium_org/content/common/android/hash_set.cc:5:0:
out/target/product/top71_et_kk/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:10:26: error: extra tokens at end of #ifndef directive [-Werror]
out/target/product/top71_et_kk/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:11:26: error: missing whitespace after the macro name [-Werror]
In file included from external/chromium_org/content/common/android/hash_set.cc:5:0:
out/target/product/top71_et_kk/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:24:20: error: expected initializer before ‘<’ token
out/target/product/top71_et_kk/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:26:17: error: expected initializer before ‘<’ token
out/target/product/top71_et_kk/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:29:22: error: expected ‘{’ before ‘<’ token
out/target/product/top71_et_kk/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:29:22: error: expected unqualified-id before ‘<’ token
external/chromium_org/content/common/android/hash_set.cc:30:1: error: expected ‘}’ at end of input
cc1plus: all warnings being treated as errors
make[3]: * [out/target/product/top71_et_kk/obj/STATIC_LIBRARIES/content_content_common_gyp_intermediates/content/common/android/hash_set.o] 错误 1
make[3]: * 正在等待未完成的任务….
target thumb C++: content_content_common_gyp <= external/chromium_org/content/common/android/surface_texture_peer.cc
make[3]: * wait: 没有子进程。 停止。

这是因为javap的版本不正确引起的。
javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。
javac是原来编译,生成java字节码的。
java是用来执行java字节码的。

所以,这里我们需要修改javap的版本:

3、sudo update-alternatives –config javap

有 6 个候选项可用于替换 javap (提供 /usr/bin/javap)。

选择 路径 优先级 状态

0 /usr/lib/jvm/java-8-oracle/bin/javap 1081 自动模式
1 /usr/lib/jvm/java-6-openjdk-amd64/bin/javap 1061 手动模式
* 2 /usr/lib/jvm/java-6-oracle/bin/javap 1062 手动模式
3 /usr/lib/jvm/java-7-openjdk-amd64/bin/javap 1051 手动模式
4 /usr/lib/jvm/java-7-oracle/bin/javap 1063 手动模式
5 /usr/lib/jvm/java-8-openjdk-amd64/bin/javap 1069 手动模式
6 /usr/lib/jvm/java-8-oracle/bin/javap 1081 手动模式

原创粉丝点击