经过从下载到编译的二十多个小时…终于成功的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
- 搜索文件current.txt(不要问我为什么要用搜索,因为我没记住路径),打开那个创建/修改时间离现在最近的文件,全选 - 复制。
- 打开prebuilts/sdk/api/19.txt(你的Android系统版本号),全选 - 粘贴。
- make,成功(不用clean,可以继续编译…到这里已经离成功很近了)。若还报错,请检查的java、javac、javadoc、javap版本。
本文记录了在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工具版本。
4146





