当前位置:首页 > 芯闻号 > 充电吧
[导读]在学习应用编程时,为了实现应用在后台对其它界面的控制,需要将应用的权限提高到系统级。但提高到系统级的方法,其中一个就是放在 Android 源代码目录中进行编译;另一个方法已经试过,但安装失败。开始一

在学习应用编程时,为了实现应用在后台对其它界面的控制,需要将应用的权限提高到系统级。
但提高到系统级的方法,其中一个就是放在 Android 源代码目录中进行编译;另一个方法已经试过,但安装失败。
开始一直想直接从 Google 的网站上获取 Android 源代码,但由于大陆对 Google 的封锁,导致无法获取到。大家都通过 VPN 来获取,但一般 VPN 是需要费用的。
后来才将获取 Android 源代码的方向转向别人下载好,打包传到网上的。
先后从 XX 云盘下载了 3 个 Android 源代码压缩包,分别是:
repo.tar.gz 12.2GB
WORKING_DIRECTORY.tar 12.4GB 
android4.0.tar.gz 1.73GB
前两个还没有使用过,先使用 android4.0.tar.gz 进行了试验。

在 Ubuntu 中先解压 android4.0.tar.gz: tar -zxvf android4.0.tar.gz

安装 jdk-6u45-linux-i586.bin,从 Oracle 网站上下载,需要在 Oracle 注册。
获取 jdk-6u45-linux-i586.bin 下载网址的办法: google "jdk-6u45-linux" 得到的第一个搜索结果: 
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html
注意: 不用使用 Ubuntu 提供的 open-jdk 的版本。

安装过程:
(1) 赋予执行权限,在 terminal 中输入: chmod a+x jdk-6u45-linux-i586.bin
(2) 解压,在 terminal 中输入: ./jdk-6u45-linux-i586.bin
(3) 创建 jvm 目录,在 terminal 中输入: sudo mkdir /usr/lib/jvm
(4) 移动解压文件,在 terminal 中输入: sudo mv ~/AndroidSource/android4.0/jdk1.6.0_45 /usr/lib/jvm/jdk1.6.0_45
(5) 启用 jdk 6,在 terminal 中输入:
sudo ln -s -b /usr/lib/jvm/jdk1.6.0_45/jre/bin/java /etc/alternatives/java
sudo ln -s -b /usr/lib/jvm/jdk1.6.0_45/jre/bin/java /usr/bin/java
(6) 检验,在 terminal 中输入:java -version
结果应显示: 
java version "1.6.0_45"
(7) 编辑配置文件,在 terminal 中输入: sudo vim /etc/profile
在文件末尾添加如下条目: 
JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45                         
export JRE_HOME=/usr/lib/jvm/jdk1.6.0_45/jre   
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH   
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 
#set java environment
这里要根据自己的安装路径对以上内容进行修改!重启系统后java的环境就安装好了。
注: vim 操作指令,(1) Insert 按键;(2) : ; (3)! ; (4) w/q

开始编译 Android 源代码,进入目录: ~/AndroidSource/android4.0,依次输入如下指令:
#make installclean
#make clean
#source build/envsetup.sh
#lunch 选择版本号: lunch full-eng
     1. full-eng
     2. full_x86-eng
     3. vbox_x86-eng
     4. full_maguro-userdebug
     5. full_tuna-userdebug
     6. full_panda-eng
Which would you like  [full-eng] 5
#make -j4 其中-j(n)表示用n核cpu编译

如果出错如下错误,按对应方法解决:
(1) Ubuntu bison:找不到命令
sudo apt-get install g++
(2) Ubuntu g++:找不到命令 
sudo apt-get install bison
(3) /usr/bin/ld: cannot find -lz
详细信息如下:
host C: libpng <= external/libpng/pngwtran.c
host C: libpng <= external/libpng/pngwutil.c
host StaticLib: libpng (out/host/linux-x86/obj/STATIC_LIBRARIES/libpng_intermediates/libpng.a)
host Executable: aapt (out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] 错误 1
解决方法:    
更新了工具的安装,如下:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown libxml2-utils xsltproc
可以继续编译。

错误1:
编译过程中出现一次提示: 进程被杀掉的错误,并终止的现象。
当时没有记录具体的错误,重新编译就 OK 了。
------重新执行: make -j2

错误2:
t_intermediates/src -api out/target/common/obj/PACKAGING/public_api.txt -nodocs
make: *** 正在等待未完成的任务....
make: *** [out/target/common/docs/api-stubs-timestamp] 错误 45
解决方法(使用方法2): 
(1) 网上一种解决方法(但我的 extenal 目录中没有 clearsilver 目录(有人说此方法适用于: Android 2.3))
是由于clearsilver在编译时如果检测到使用Java JDK 6,就使用64位编译。要避开此错误,需要修改下面四个文件: 
external/clearsilver/cgi/Android.mk 
external/clearsilver/java-jni/Android.mk 
external/clearsilver/util/Android.mk 
external/clearsilver/cs/Android.mk 
把这四个Makefile中的下列语句注掉即可: 
# This forces a 64-bit build for Java6 
# Comment by Easwy 
# LOCAL_CFLAGS += -m64 
# LOCAL_LDFLAGS += -m64 
然后在external/clearsilver目录中执行一下make clean,然后回到项目根目录,继续make即可。
(2) make clear/make update-api/make
(3) make: *** [out/target/common/docs/doc-comment-check-timestamp] 错误 45
解决方法:需要做个链接如下:
sudo ln -s /usr/lib/jvm/jdk1.6.0_45/bin/jar /bin/jar
sudo ln -s /usr/lib/jvm/jdk1.6.0_45/bin/java /bin/java
sudo ln -s /usr/lib/jvm/jdk1.6.0_45/bin/javac /bin/javac
sudo ln -s /usr/lib/jvm/jdk1.6.0_45/bin/javah /bin/javah
sudo ln -s /usr/lib/jvm/jdk1.6.0_45/bin/javadoc /bin/javadoc

错误:
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-ar: out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a: No space left on device
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a] 错误 1
make: *** 正在删除文件“out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a”
原因: 空间不足导致编译中断

挂载一个 20G 的空分区,重新解压 android4.0.tar.gz: tar -zxvf android4.0.tar.gz
make installclean
make clean
make update-api
source build/envsetup.sh
make -j2

错误:
nd/m_demangle/cplus-dem.c:2865: error: undefined reference to 'vgPlain_strcspn'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/generic/obj/STATIC_LIBRARIES/libcoregrind-arm-linux_intermediates/libcoregrind-arm-linux.a(cplus-dem.o): in function gnu_special:external/valgrind/main/coregrind/m_demangle/cplus-dem.c:2926: error: undefined reference to 'vgPlain_strpbrk'
collect2: ld returned 1 exit status
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/cachegrind-arm-linux_intermediates/LINKED/cachegrind-arm-linux] 错误 1
原因: 没有执行 lunch 

错误: 
target StaticLib: libwebcore (out/target/product/tuna/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a)
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-ar: out/target/product/tuna/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a: No space left on device
make: *** [out/target/product/tuna/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a] 错误 1
make: *** 正在删除文件“out/target/product/tuna/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a”
/usr/bin/ld: final link failed: No space left on device
collect2: ld returned 1 exit status
make: *** 正在等待未完成的任务....
make: *** [out/host/linux-x86/obj/lib/libbcc.so] 错误 1

挂载一个 20G 的空分区后编译  Android 4.0.1 的源代码,仍然出现: No space left on device。所以一狠心,将现在用的 Ubuntu 虚拟机删除了,重建一个 80G 的虚拟机。
使用 Ubuntu 10.04,安装后不做任何升级。
以下是操作过程中对硬盘剩余空间的记录: 
(1) 80G 安装 Ubuntu 后剩余 69.7 GB
(2) 复制 android4.0.tar.gz 和 jdk-6u45-linux-i586.bin 后,解压: tar -zxvf android4.0.tar.gz 后剩余 61.4 GB
(3)准备好编译环境后(删除 android4.0.tar.gz 和 jdk-6u45-linux-i586.bin),剩余空间 62.9 GB
开始编译 Android 4.0.1 源代码。
如果编译过程中出现错误,只要编译环境的配置是正确的,就不要试着去解决它。只需要简单的重新编译即可!编译成功后,剩余的空间是 51.1 GB。
编译 Android 4.0.1 源代码,至少需要 18.6G 的硬盘空间。

编译成功结束时的 LOG: 
Target system fs image: out/target/product/tuna/obj/PACKAGING/systemimage_intermediates/system.img
in mkuserimg.sh PATH=out/host/linux-x86/bin/:/usr/lib/jvm/java-6-sun/bin:/usr/lib/jvm/jdk1.6.0_45/bin:/usr/lib/jvm/jdk1.6.0_45/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/leozheng/android4.0/out/host/linux-x86/bin:/home/leozheng/android4.0/prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin:/home/leozheng/android4.0/development/emulator/qtools:/home/leozheng/android4.0/prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin:/home/leozheng/android4.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
make_ext4fs -s -l 685768704 -a system out/target/product/tuna/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/tuna/system
Creating filesystem with parameters:
    Size: 685768704
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 6976
    Inode size: 256
    Journal blocks: 2616
    Label: 
    Blocks: 167424
    Block groups: 6
    Reserved block group size: 47
Created filesystem with 904/41856 inodes and 41089/167424 blocks
Install system fs image: out/target/product/tuna/system.img
out/target/product/tuna/system.img+out/target/product/tuna/obj/PACKAGING/recovery_patch_intermediates/recovery_from_boot.p total size is 159017016

启动编译后的 Android 4.0.1 模拟器
leozheng@ubuntu:~$ ls
android4.0  Documents  examples.desktop  Pictures  Templates
Desktop     Downloads  Music             Public    Videos
leozheng@ubuntu:~$ cd android4.0/out/host/linux-x86/bin
按网上的说明,要进入 sdk 目录。但此目录不存在,会提示 bash: cd: sdk: No such file or directory
leozheng@ubuntu:~/android4.0/out/host/linux-x86/bin$ ls
......
leozheng@ubuntu:~/android4.0/out/host/linux-x86/bin$ ls em*
emulator  emulator-arm  emulator-ui  emulator-x86
leozheng@ubuntu:~/android4.0/out/host/linux-x86/bin$ ./emulator
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.
If you are an Android SDK user, please use '@

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭