Ubuntu编译Android
2013-10-25 20:17
489 查看
[align=left]编译之前要安装一些依赖包什么的,还有JDK之类的东西。[/align]
[align=left]因为之前编译过android的源代码,机器已经安装了,而且是64bit的系统,所以在terminal转到源代码目录下,直接make即可,要修改编译中分配的线程的话,make –jN即可,N为线程数。e.g :[/align]
make –j6
复制代码
--------------------------------------------------------------------编译准备工作------------------------------------------------------------------
[align=left]附上需要安装的依赖:[/align]
$ sudo apt-get update
$ sudo apt-get -y install git-core
$ sudo apt-get -y install gnupg
$ sudo apt-get -y install sun-java6-jdk flex
$ sudo apt-get -y install bison
$ sudo apt-get -y install gperf
$ sudo apt-get -y install libsdl-dev
$ sudo apt-get -y install libesd0-dev
$ sudo apt-get -y install libwxgtk2.6-dev
$ sudo apt-get -y install build-essential
$ sudo apt-get -y install zip
$ sudo apt-get -y install curl
$ sudo apt-get -y install libncurses5-dev
$ sudo apt-get -y install zlib1g-dev
$ sudo apt-get -y install valgrind
复制代码
[align=left](如果是32bit的系统的话,则要更改几个Android.mk文件)[/align]
/external/clearsilver/cgi/Android.mk
/external/clearsilver/java-jni/Android.mk
/external/clearsilver/util/Android.mk
/external/clearsilver/cs/Android.mk
复制代码
用gedit打开,修改m64为m32即可
另外
build/core/main.mk
复制代码
也要把
ifneq (64,$(findstring 64,$(build_arch)))
复制代码
修改为
ifneq (i686,$(findstring i686,$(build_arch)))
复制代码
--------------------------------------------------------------------编译过程------------------------------------------------------------------
[align=left]在terminal中[/align]
[align=left] [/align]
$make
复制代码
编译开始……
[align=left] [/align]
[align=left]可以看到platform version为4.0.1,然后开始漫长的等待。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]如果是32bit的系统,就可能会出现一下两个问题[/align]
[align=left]error 1、[/align]
make: ***
[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1
复制代码
[align=left]
在terminal中输入[/align]
[align=left] [/align]
$ gedit frameworks/base/libs/utils/Android.mk
复制代码
[align=left]
将下面这一行
[/align]
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
复制代码
改为
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
复制代码
[align=left] [/align]
[align=left]error 2、
[/align]
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1
复制代码
[align=left]此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的。[/align]
[align=left]解决方法:[/align]
[align=left]修改源码目录下[/align]
/build/core/combo/HOST_linux-x86.mk
复制代码
[align=left]将以下语句[/align]
HOST_GLOBAL_CFLAGS
+= -D_FORTIFY_SOURCE=0
复制代码
[align=left]修改为[/align]
HOST_GLOBAL_CFLAGS
+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
复制代码
[align=left] [/align]
[align=left]打开system monitor查看一下系统的资源利用情况,前二十分钟,cpu各个线程几乎都是满载工作,memory一般维持在1.5G左右。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]然后三十分钟过后,memory开始直线上升了,主要是在执行一些copying和install之类的工作,CPU的线程就一般不超过10%了。期间电脑卡爆,memory满载一直持续到编译工作的完成。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]编译过程大概花了两个小时,如果机器的memory上到8G的话,估计时间也就40分钟左右。但是一些人说的最低要求16G内存是很坑人的,都没有试过,然后就以讹传讹了。[/align]
[align=left]我的电脑为AMD X4 640 内存为4G的32位ubuntu11.10编译android 2.3也就一个小时。加到8G内存的话,编译android 4.0估计也没压力。(CPU超频到3.52GHZ,cool and quiet关闭)[/align]
[align=left]编译成功会会再源码目录下生成一个out文件夹,大小有12G,所有所在的挂载区剩余空间最好大于20G。[/align]
[align=left]相应的img在[/align]
out/target/product/generic
复制代码
[align=left]里面,一共有三个img,ramdisk.img 、system.img、 user.img[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]其中ramdisk.img是一个分区映像文件,kernel启动时,ramdisk负责init,system.img包括了主要系统,系统app等,挂载于/system, userdata.img包括了一些用户数据,被挂载到/data下,diy过固件的童鞋应该是很清楚这一点的。[/align]
[align=left] [/align]
[align=left]另外还有root、system、data三个文件夹,其实就是上述三个img解压之后的内容而已.root对应ramdisk.img.。[/align]
[align=left]可以进去system目录下查看一下安装过的app[/align]
[align=left] [/align]
[align=left]然后再顺便把android 4.0的SDK编译出来,因为make编译并不包含kernel和SDK。[/align]
[align=left]在源码目录执行[/align]
$make PRODUCT-sdk-sdk
复制代码
[align=left]即可。[/align]
[align=left]SDK编译的话,时间就短了很多,也就不到30分钟吧。[/align]
[align=left] [/align]
[align=left]编译之后可以在out/host/linux-x86/sdk发现编译出来的android 4.0 SDK包,跳到tools,可以看到一些android工具之类的,其中emulator是用来加载启动编译好的以上3个img文件。[/align]
<ignore_js_op>
[align=left]好吧,来看看android 4.0的面目。[/align]
[align=left]配置一下export[/align]
$sudo gedit
/etc/bash.bash.rc
复制代码
[align=left]在后面增加[/align]
export ANDROID_SDK_HOME=/usr/android4.0/android4.0/out/host/linux-x86/sdk/android-sdk_eng.xumin_linux-x86
export PATH=$ANDROID_SDK_HOME/tools:$PATH
export ANDROID_PRODUCT_OUT=/usr/android4.0/android4.0/out/target/product/generic
复制代码
[align=left]保存退出,然后再开一个shell,输入[/align]
$emulator
复制代码
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
[align=left] [/align]
[align=left]就可以看到android 4.0的虚拟机了。[/align]
[align=left]额,分辨率貌似有点低,好吧,在eclipse下面引入刚刚编译好的SDK,配置一个android 4.0的AVC,来点有平板味道的android虚拟机。[/align]
[align=left]先安装ADT插件[/align]
[align=left] [/align]
http://dl-ssl.google.com/android/eclipse/
复制代码
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
[align=left] [/align]
[align=left] [/align]
[align=left]Android 4.0的UI看起来很清爽,没有2.3那种沉闷感,解锁是全新方式,主菜单里面分了两个类别,图标很多都是全新的面孔。[/align]
[align=left]一个是APP,另外一个是WIDGETS,小控件之类的东西,可拖动。[/align]
[align=left] [/align]
[align=left]看一下系统信息,可发现kernel版本是2.6.29的,可以下载新的内核3.0.1重新编译。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]--------------------------------------------------------------------------乱谈分割线-------------------------------------------------------------------------
[/align]
[align=left] [/align]
[align=left]Android 4.0是在Android3.X基础上升级的,有了真正的平板上面的android系统,并不像以前的android 2.3那样,拿一个手机的系统整到平板上面去跑,很多东西看着都别扭。[/align]
[align=left] [/align]
[align=left]现在传出来的消息是RK2918运行ICS,基本程序和应用问题不大,但是3D应用会稍微吃力,依赖于android4.0的代码优化好,没有太大问题,然后国内的几个厂家都想先拨头筹,现在距离android 4.0发布也就两周,拿到源代码的时间较短,新系统的移植出现的各种新bug,flash支持什么的,加上android 2.3残留下来的老毛病,也有得折腾的。希望厂家淡定点,不要急着量产android 4.0,先完善产品。Rk29上android 4.0还是感觉是为了RK30作为测试而已,也顺手榨干RK29的剩余价值,真正主力还是在RK30双核。[/align]
----------------------------------------------------------------------------------------------------------
[align=left]另外提一下:[/align]
[align=left] [/align]
[align=left]关于android 4.0与内核的关系[/align]
[align=left] [/align]
[align=left]有些玩家误以为2.6.X的内核不是真正的android 4.0[/align]
[align=left] [/align]
[align=left] 个人有点不大同意,首先一点,内核的更新一般都是更新了一些android平台的设备驱动和修正bug之类的。事实上,更新并不是非常大,更加不存在真假android 4.0的说法。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]还有网上的一篇文章的一句话,引用一下[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]这位工程师的意思是说Rk29平台的android 4.0最好是更新到3.0的kernel,要不就会有一些兼容性的问题,其实也就是一些驱动、bug什么的,也没什么大不了的。而其他方案是否更新到新版本的内核,还得看方案,不过升级了,还是多了一个可宣传的噱头。[/align]
[align=left] [/align]
[align=left]另外关于之前说的android被linux kernel踢出一事,除了更新kernel麻烦一点点,编译一个新的kernel是非常简单的事情而已,3.0.X的kernel随便上,另外官方下载的源代码编译出来的初始kernel版本也2.6.29,难道官方放出来的android 4.0就不是真正的ICS了?[/align]
[align=left]因为之前编译过android的源代码,机器已经安装了,而且是64bit的系统,所以在terminal转到源代码目录下,直接make即可,要修改编译中分配的线程的话,make –jN即可,N为线程数。e.g :[/align]
make –j6
复制代码
--------------------------------------------------------------------编译准备工作------------------------------------------------------------------
[align=left]附上需要安装的依赖:[/align]
$ sudo apt-get update
$ sudo apt-get -y install git-core
$ sudo apt-get -y install gnupg
$ sudo apt-get -y install sun-java6-jdk flex
$ sudo apt-get -y install bison
$ sudo apt-get -y install gperf
$ sudo apt-get -y install libsdl-dev
$ sudo apt-get -y install libesd0-dev
$ sudo apt-get -y install libwxgtk2.6-dev
$ sudo apt-get -y install build-essential
$ sudo apt-get -y install zip
$ sudo apt-get -y install curl
$ sudo apt-get -y install libncurses5-dev
$ sudo apt-get -y install zlib1g-dev
$ sudo apt-get -y install valgrind
复制代码
[align=left](如果是32bit的系统的话,则要更改几个Android.mk文件)[/align]
/external/clearsilver/cgi/Android.mk
/external/clearsilver/java-jni/Android.mk
/external/clearsilver/util/Android.mk
/external/clearsilver/cs/Android.mk
复制代码
用gedit打开,修改m64为m32即可
另外
build/core/main.mk
复制代码
也要把
ifneq (64,$(findstring 64,$(build_arch)))
复制代码
修改为
ifneq (i686,$(findstring i686,$(build_arch)))
复制代码
--------------------------------------------------------------------编译过程------------------------------------------------------------------
[align=left]在terminal中[/align]
[align=left] [/align]
$make
复制代码
编译开始……
[align=left] [/align]
[align=left]可以看到platform version为4.0.1,然后开始漫长的等待。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]如果是32bit的系统,就可能会出现一下两个问题[/align]
[align=left]error 1、[/align]
make: ***
[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1
复制代码
[align=left]
在terminal中输入[/align]
[align=left] [/align]
$ gedit frameworks/base/libs/utils/Android.mk
复制代码
[align=left]
将下面这一行
[/align]
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
复制代码
改为
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
复制代码
[align=left] [/align]
[align=left]error 2、
[/align]
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1
复制代码
[align=left]此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的。[/align]
[align=left]解决方法:[/align]
[align=left]修改源码目录下[/align]
/build/core/combo/HOST_linux-x86.mk
复制代码
[align=left]将以下语句[/align]
HOST_GLOBAL_CFLAGS
+= -D_FORTIFY_SOURCE=0
复制代码
[align=left]修改为[/align]
HOST_GLOBAL_CFLAGS
+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
复制代码
[align=left] [/align]
[align=left]打开system monitor查看一下系统的资源利用情况,前二十分钟,cpu各个线程几乎都是满载工作,memory一般维持在1.5G左右。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]然后三十分钟过后,memory开始直线上升了,主要是在执行一些copying和install之类的工作,CPU的线程就一般不超过10%了。期间电脑卡爆,memory满载一直持续到编译工作的完成。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]编译过程大概花了两个小时,如果机器的memory上到8G的话,估计时间也就40分钟左右。但是一些人说的最低要求16G内存是很坑人的,都没有试过,然后就以讹传讹了。[/align]
[align=left]我的电脑为AMD X4 640 内存为4G的32位ubuntu11.10编译android 2.3也就一个小时。加到8G内存的话,编译android 4.0估计也没压力。(CPU超频到3.52GHZ,cool and quiet关闭)[/align]
[align=left]编译成功会会再源码目录下生成一个out文件夹,大小有12G,所有所在的挂载区剩余空间最好大于20G。[/align]
[align=left]相应的img在[/align]
out/target/product/generic
复制代码
[align=left]里面,一共有三个img,ramdisk.img 、system.img、 user.img[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]其中ramdisk.img是一个分区映像文件,kernel启动时,ramdisk负责init,system.img包括了主要系统,系统app等,挂载于/system, userdata.img包括了一些用户数据,被挂载到/data下,diy过固件的童鞋应该是很清楚这一点的。[/align]
[align=left] [/align]
[align=left]另外还有root、system、data三个文件夹,其实就是上述三个img解压之后的内容而已.root对应ramdisk.img.。[/align]
[align=left]可以进去system目录下查看一下安装过的app[/align]
[align=left] [/align]
[align=left]然后再顺便把android 4.0的SDK编译出来,因为make编译并不包含kernel和SDK。[/align]
[align=left]在源码目录执行[/align]
$make PRODUCT-sdk-sdk
复制代码
[align=left]即可。[/align]
[align=left]SDK编译的话,时间就短了很多,也就不到30分钟吧。[/align]
[align=left] [/align]
[align=left]编译之后可以在out/host/linux-x86/sdk发现编译出来的android 4.0 SDK包,跳到tools,可以看到一些android工具之类的,其中emulator是用来加载启动编译好的以上3个img文件。[/align]
<ignore_js_op>
[align=left]好吧,来看看android 4.0的面目。[/align]
[align=left]配置一下export[/align]
$sudo gedit
/etc/bash.bash.rc
复制代码
[align=left]在后面增加[/align]
export ANDROID_SDK_HOME=/usr/android4.0/android4.0/out/host/linux-x86/sdk/android-sdk_eng.xumin_linux-x86
export PATH=$ANDROID_SDK_HOME/tools:$PATH
export ANDROID_PRODUCT_OUT=/usr/android4.0/android4.0/out/target/product/generic
复制代码
[align=left]保存退出,然后再开一个shell,输入[/align]
$emulator
复制代码
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
[align=left] [/align]
[align=left]就可以看到android 4.0的虚拟机了。[/align]
[align=left]额,分辨率貌似有点低,好吧,在eclipse下面引入刚刚编译好的SDK,配置一个android 4.0的AVC,来点有平板味道的android虚拟机。[/align]
[align=left]先安装ADT插件[/align]
[align=left] [/align]
http://dl-ssl.google.com/android/eclipse/
复制代码
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
[align=left] [/align]
[align=left] [/align]
[align=left]Android 4.0的UI看起来很清爽,没有2.3那种沉闷感,解锁是全新方式,主菜单里面分了两个类别,图标很多都是全新的面孔。[/align]
[align=left]一个是APP,另外一个是WIDGETS,小控件之类的东西,可拖动。[/align]
[align=left] [/align]
[align=left]看一下系统信息,可发现kernel版本是2.6.29的,可以下载新的内核3.0.1重新编译。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]--------------------------------------------------------------------------乱谈分割线-------------------------------------------------------------------------
[/align]
[align=left] [/align]
[align=left]Android 4.0是在Android3.X基础上升级的,有了真正的平板上面的android系统,并不像以前的android 2.3那样,拿一个手机的系统整到平板上面去跑,很多东西看着都别扭。[/align]
[align=left] [/align]
[align=left]现在传出来的消息是RK2918运行ICS,基本程序和应用问题不大,但是3D应用会稍微吃力,依赖于android4.0的代码优化好,没有太大问题,然后国内的几个厂家都想先拨头筹,现在距离android 4.0发布也就两周,拿到源代码的时间较短,新系统的移植出现的各种新bug,flash支持什么的,加上android 2.3残留下来的老毛病,也有得折腾的。希望厂家淡定点,不要急着量产android 4.0,先完善产品。Rk29上android 4.0还是感觉是为了RK30作为测试而已,也顺手榨干RK29的剩余价值,真正主力还是在RK30双核。[/align]
----------------------------------------------------------------------------------------------------------
[align=left]另外提一下:[/align]
[align=left] [/align]
[align=left]关于android 4.0与内核的关系[/align]
[align=left] [/align]
[align=left]有些玩家误以为2.6.X的内核不是真正的android 4.0[/align]
[align=left] [/align]
[align=left] 个人有点不大同意,首先一点,内核的更新一般都是更新了一些android平台的设备驱动和修正bug之类的。事实上,更新并不是非常大,更加不存在真假android 4.0的说法。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]还有网上的一篇文章的一句话,引用一下[/align]
[align=left] [/align]
樊建鹏:系统版本的升级从Android2.3升到Android4.0,需要内核版本的同步升级支持,内核要为3.0.8版才行,如果是2.6.X则无法实现好的兼容性。
[align=left] [/align]
[align=left]这位工程师的意思是说Rk29平台的android 4.0最好是更新到3.0的kernel,要不就会有一些兼容性的问题,其实也就是一些驱动、bug什么的,也没什么大不了的。而其他方案是否更新到新版本的内核,还得看方案,不过升级了,还是多了一个可宣传的噱头。[/align]
[align=left] [/align]
[align=left]另外关于之前说的android被linux kernel踢出一事,除了更新kernel麻烦一点点,编译一个新的kernel是非常简单的事情而已,3.0.X的kernel随便上,另外官方下载的源代码编译出来的初始kernel版本也2.6.29,难道官方放出来的android 4.0就不是真正的ICS了?[/align]
相关文章推荐
- Android应用使用JavaMail发送邮件
- android用jsoup分析网页
- android学习_android的第一个程序
- Android中对话框的使用
- Android中如何做到Service被关闭后又自动启动
- 关于Ubuntu 13.04 64位系统配置Android SDK环境变量的问题
- android运行时发现异常 Unresolved compilation problem
- Android游戏开发测量每秒帧数 Frames Per Second (FPS)
- 关于Android动画之Tween
- Android服务端本地窗口FramebufferNativeWindow
- Android 头 5 年最重要的 20 个里程碑
- android EditText 自动滚动条并显示最新内容 .
- Android中用Spannable在TextView中设置超链接、颜色、字体
- android Activity之间的跳转
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- Android最佳实践之:StrictMode介绍
- [转]ANDROID JNI之JAVA域与c域的互操作
- Android】Android apk默认安装位置设置
- [Android] 文字翻转动画的实现
- [Android] SurfaceView使用实例(正余弦移动)