记Android源码编译遇到的两个坑

本文记录了在Ubuntu 16.04环境下,使用JDK1.6编译Android 4.4.2源码时遇到的两个主要问题。第一个问题是/content/common/android/hash_set.cc报错,解决方法是确保javap的版本与JDK版本匹配。第二个问题是checkapi-last检查报错,通过对比current.txt和api/19.txt解决,同时检查相关Java工具版本。
AI助手已提取文章相关产品:

经过从下载到编译的二十多个小时…终于成功的img编译出来了。先写一下遇到的两个坑,有空再写一下过程。

环境
  • Ubuntu 16.04
  • JDK1.6
  • Android_4.4.2
坑一
/content/common/android/hash_set.cc 报错,错误信息大概是这样的(来自百度):
In file included from externalromium_org/content/common/android/hash_set.cc:5:0:
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:10:26: error: extra tokens at end of #ifndef directive [-Werror]
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:11:26: error: missing whitespace after the macro name [-Werror]
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:24:20: error: expected initializer before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:26:17: error: expected initializer before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:29:22: error: expected '{' before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:29:22: error: expected unqualified-id before '<' token
externalromium_org/content/common/android/hash_set.cc:30:1: error: expected '}' at end of input
cc1plus: all warnings being treated as errors
make: *** [out/target/product/xxx/obj/STATIC_LIBRARIES/content_content_common_gyp_intermediates/content/common/android/hash_set.o] 错误 1

原因是javap的版本,Android4.4.2需要用JDK1.6编译,除了要设置java、javac的版本之外还要设置javap的版本,方可解决这个错误。

sudo update-alternatives --install /usr/bin/javap javap /home/jdk1.6.0_45/bin/javap 300
sudo update-alternatives --config javap

修改版本之后最好重新运行一下source build/envsetup.sh和lunch

坑二
Checking API: checkapi-last 报错,错误信息大概是这样的(来自百度):
prebuilts/sdk/api/19.txt:23573: error 8: Removed public class android.test.ActivityInstrumentationTestCase
prebuilts/sdk/api/19.txt:23580: error 8: Removed public class android.test.ActivityInstrumentationTestCase2
prebuilts/sdk/api/19.txt:23588: error 8: Removed public class android.test.ActivityTestCase
prebuilts/sdk/api/19.txt:23595: error 8: Removed public class android.test.ActivityUnitTestCase
prebuilts/sdk/api/19.txt:23620: error 8: Removed public class android.test.AndroidTestRunner
prebuilts/sdk/api/19.txt:23641: error 8: Removed public class android.test.ApplicationTestCase
prebuilts/sdk/api/19.txt:23650: error 8: Removed public class android.test.AssertionFailedError
prebuilts/sdk/api/19.txt:23655: error 8: Removed public class android.test.ComparisonFailure
prebuilts/sdk/api/19.txt:23675: error 8: Removed public class android.test.InstrumentationTestRunner
prebuilts/sdk/api/19.txt:23701: error 8: Removed public class android.test.IsolatedContext
prebuilts/sdk/api/19.txt:23706: error 8: Removed public class android.test.LoaderTestCase
prebuilts/sdk/api/19.txt:23711: error 8: Removed public class android.test.MoreAsserts
prebuilts/sdk/api/19.txt:23763: error 8: Removed public class android.test.ProviderTestCase
prebuilts/sdk/api/19.txt:23771: error 8: Removed public class android.test.ProviderTestCase2
prebuilts/sdk/api/19.txt:23779: error 8: Removed public class android.test.RenamingDelegatingContext
prebuilts/sdk/api/19.txt:23788: error 8: Removed public class android.test.ServiceTestCase
prebuilts/sdk/api/19.txt:23801: error 8: Removed public class android.test.SingleLaunchActivityTestCase
prebuilts/sdk/api/19.txt:23807: error 8: Removed public class android.test.SyncBaseInstrumentation
prebuilts/sdk/api/19.txt:23813: error 8: Removed public class android.test.TestSuiteProvider
prebuilts/sdk/api/19.txt:23817: error 8: Removed public class android.test.TouchUtils
prebuilts/sdk/api/19.txt:23855: error 8: Removed public class android.test.ViewAsserts
prebuilts/sdk/api/19.txt:23878: error 7: Removed package android.test.mock
prebuilts/sdk/api/19.txt:24123: error 7: Removed package android.test.suitebuilder
prebuilts/sdk/api/19.txt:32792: error 7: Removed package com.android.internal.util

不要问我为什么错误信息都是来自百度..反正就是一大堆的api/19.txt:*****: error *: Removed xxxxxxxxxxxxxx。
原因未知,解决方法如下:
1. 先运行

make update-api
  1. 搜索文件current.txt(不要问我为什么要用搜索,因为我没记住路径),打开那个创建/修改时间离现在最近的文件,全选 - 复制。
  2. 打开prebuilts/sdk/api/19.txt(你的Android系统版本号),全选 - 粘贴。
  3. make,成功(不用clean,可以继续编译…到这里已经离成功很近了)。若还报错,请检查的java、javac、javadoc、javap版本。

您可能感兴趣的与本文相关内容

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值