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

由于公司平台多,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 手动模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值