android源码编译1
一、环境说明:
1、liunx系统:Ubuntu12.04
2、jdk:sun-java6-jdk
3、g++4.5 gcc4.5
二、android源码的目录结构
|--Makefile|--bionic (bionic C库)|--bootable (启动引导相关代码)|--build (存放系统编译规则及generic等基础开发包配置)|--cts (Android兼容性测试套件标准)|--dalvik (dalvik JAVA虚拟机)|--development (应用程序开发相关)|--external (android使用的一些开源的模组)|-- frameworks (核心框架——java及C++语言)|--hardware (部分厂家开源的硬解适配层HAL代码)|-- out(编译完成后的代码输出与此目录)|--packages (应用程序包)|--prebuilt (x86和arm架构下预编译的一些资源)|--sdk (sdk及模拟器)|--system (底层文件系统库、应用及组件——C语言) `--vendor (厂商定制代码) bionic 目录|--libc (C库)| |-- arch-arm (ARM架构,包含系统调用汇编实现)| |-- arch-x86 (x86架构,包含系统调用汇编实现)| |--bionic (由C实现的功能,架构无关)| |--docs (文档)| |--include (头文件)| |--inet (?inet相关,具体作用不明)| |--kernel (Linux内核中的一些头文件)| |--netbsd (?nesbsd系统相关,具体作用不明)| |-- private(?一些私有的头文件)| |--stdio (stdio实现)| |--stdlib (stdlib实现)| |-- string(string函数实现)| |--tools (几个工具)| |--tzcode (时区相关代码)| |--unistd (unistd实现)| `--zoneinfo (时区信息)|--libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|--libm (libm数学库的实现,)| |--alpha (apaha架构)| |--amd64 (amd64架构)| |--arm (arm架构)| |--bsdsrc (?bsd的源码)| |--i386 (i386架构)| |--i387 (i387架构?)| |--ia64 (ia64架构)| |--include (头文件)| |-- man (数学函数,后缀名为.3,一些为freeBSD的库文件)| |--powerpc (powerpc架构)| |--sparc64 (sparc64架构)| `--src (源代码)|-- libstdc++ (libstdc++ C++实现库)| |--include (头文件)| `--src (源码)|--libthread_db (多线程程序的调试器库)| `--include (头文件) `--linker (动态链接器) `--arch (支持arm和x86两种架构) bootable 目录 .|--bootloader (适合各种bootloader的通用代码)| `--legacy (估计不能直接使用,可以参考)| |--arch_armv6 (V6架构,几个简单的汇编文件)| |--arch_msm7k (高通7k处理器架构的几个基本驱动)| |--include (通用头文件和高通7k架构头文件)| |--libboot (启动库,都写得很简单)| |--libc (一些常用的c函数)| |--nandwrite (nandwirte函数实现)| `--usbloader (usbloader实现)|--diskinstaller (android镜像打包器,x86可生产iso) `--recovery (系统恢复相关)|--edify (升级脚本使用的edify脚本语言)|--etc (init.rc恢复脚本)|--minui (一个简单的UI)|--minzip (一个简单的压缩工具)|--mtdutils (mtd工具)|--res (资源)| `--images (一些图片)|--tools (工具)| `--ota (OTA Over The Air Updates升级工具) `--updater (升级器) build目录 .|--core (核心编译规则)|--history (历史记录)|--libs| `--host (主机端库,有android “cp”功能替换)|--target (目标机编译对象)| |--board (开发平台)| | |--emulator (模拟器)| | |--generic (通用)| | |--idea6410 (自己添加的)| | `--sim (最简单)| `--product (开发平台对应的编译规则)| `--security (密钥相关) `--tools (编译中主机使用的工具及脚本)|-- acp (Android "acp"Command)|--apicheck (api检查工具)|--applypatch (补丁工具)|--apriori (预链接工具)|--atree (tree工具)|--bin2asm (bin转换为asm工具)|--check_prereq (检查编译时间戳工具)|--dexpreopt (模拟器相关工具,具体功能不明)|--droiddoc (?作用不明,java语言,网上有人说和JDK5有关)|--fs_config (This program takes a list of files and directories)|--fs_get_stats (获取文件系统状态)|--iself (判断是否ELF格式)|--isprelinked (判断是否prelinked)|--kcm (按键相关)|--lsd (List symbol dependencies)|--releasetools (生成镜像的工具及脚本)|--rgb2565 (rgb转换为565)|--signapk (apk签名工具)|--soslim (strip工具) `--zipalign (zip archive alignment tool) dalvik目录 dalvik虚拟机 .|--dalvikvm (main.c的目录)|--dexdump (dex反汇编)|-- dexlist (List all methods in all concrete classes ina DEX file.)|--dexopt (预验证与优化)|--docs (文档)|--dvz (和zygote相关的一个命令)|--dx (dx工具,将多个java转换为dex)|--hit (?java语言写成)|--libcore (核心库)|-- libcore-disabled (?禁用的库)|--libdex (dex的库)|-- libnativehelper (Support functions for Android's class libraries) |--tests (测试代码)|--tools (工具) `--vm (虚拟机实现) development 目录 (开发者需要的一些例程及工具)|--apps (一些核心应用程序)| |--BluetoothDebug (蓝牙调试程序)| |--CustomLocale (自定义区域设置)| |--Development (开发)| |--Fallback (和语言相关的一个程序)| |--FontLab (字库)| |--GestureBuilder (手势动作)| |--NinePatchLab (?)| |--OBJViewer (OBJ查看器)| |--SdkSetup (SDK安装器)| |--SpareParts (高级设置)| |--Term (远程登录)| `--launchperf (?)|--build (编译脚本模板)|--cmds (有个monkey工具)|--data (配置数据)|--docs (文档)|--host (主机端USB驱动等)|--ide (集成开发环境)|--ndk (本地开发套件——c语言开发套件)|--pdk (Plug Development Kit)|--samples (例程)| |--AliasActivity (?)| |--ApiDemos (API演示程序)| |--BluetoothChat (蓝牙聊天)| |--BrowserPlugin (浏览器插件)| |--BusinessCard (商业卡)| |--Compass (指南针)| |--ContactManager (联系人管理器)| |--CubeLiveWallpaper (动态壁纸的一个简单例程)| |--FixedGridLayout (像是布局)| |--GlobalTime (全球时间)| |--HelloActivity (Hello)| |--Home (Home)| |--JetBoy (jetBoy游戏)| |--LunarLander (貌似又是一个游戏)| |--MailSync (邮件同步)| |--MultiResolution (多分辨率)| |--MySampleRss (RSS)| |--NotePad (记事本)| |--RSSReader (RSS阅读器)| |--SearchableDictionary (目录搜索)| |--SimpleJNI (JNI例程)| |--SkeletonApp (空壳APP)| |--Snake (snake程序)| |--SoftKeyboard (软键盘)| |--Wiktionary (?维基)| `--WiktionarySimple(?维基例程)|--scripts (脚本)|--sdk (sdk配置)|--simulator (?模拟器)|--testrunner (?测试用) `--tools (一些工具) external 目录 .|--aes (AES加密)|-- apache-http (网页服务器)|-- astl (ASTL (Android STL) is a slimmed-down version of the regular C++STL.)|-- bison (自动生成语法分析器,将无关文法转换成C、C++)|-- blktrace (blktrace isa block layer IO tracing mechanism)|--bluetooth (蓝牙相关、协议栈)|--bsdiff (diff工具)|--bzip2 (压缩工具)|--clearsilver (html模板系统)|--dbus (低延时、低开销、高可用性的IPC机制)|--dhcpcd (DHCP服务)|--dosfstools (DOS文件系统工具)|--dropbear (SSH2的server)|--e2fsprogs (EXT2文件系统工具)|--elfcopy (复制ELF的工具)|--elfutils (ELF工具)|--embunit (Embedded Unit Project)|--emma (java代码覆盖率统计工具)|--esd (Enlightened Sound Daemon,将多种音频流混合在一个设备上播放)|-- expat (Expat is a stream-oriented XML parser.)|--fdlibm (FDLIBM (Freely Distributable LIBM))|--freetype (字体)|--fsck_msdos (dos文件系统检查工具)|--gdata (google的无线数据相关)|-- genext2fs (genext2fs generates an ext2 filesystem as a normal (non-root) user)|--giflib (gif库)|--googleclient (google用户库)|-- grub (This isGNU GRUB, the GRand Unified Bootloader.)|-- gtest (Google C++Testing Framework)|-- icu4c (ICU(International Component for Unicode)在C/C++下的版本)|-- ipsec-tools (This package provides a way to use the native IPsec functionality )|--iptables (防火墙)|-- jdiff (generate a report describing the difference between two publicJava APIs.)|--jhead (jpeg头部信息工具)|--jpeg (jpeg库)|--junit (JUnit是一个Java语言的单元测试框架)|-- kernel-headers (内核的一些头文件)|-- libffi (libffi is a foreign function interfacelibrary.)|--libpcap (网络数据包捕获函数)|--libpng (png库)|--libxml2 (xml解析库)|--mtpd (一个命令)|--netcat (simple Unix utility which reads and writes dataacross network connections)|--netperf (网络性能测量工具)|--neven (看代码和JNI相关)|--opencore (多媒体框架)|--openssl (SSL加密相关)|--openvpn (VPN开源库)|--oprofile (OProfile是Linux内核支持的一种性能分析机制。)|--ping (ping命令)|--ppp (pppd拨号命令,好像还没有chat)|-- proguard (Java classfile shrinker, optimizer, obfuscator, and preverifier)|-- protobuf (a flexible, efficient, automated mechanism forserializing structured data)|--qemu (arm模拟器)|-- safe-iop (functions forperforming safe integer operations )|--skia (skia图形引擎)|-- sonivox (sole MIDI solution forGoogle Android Mobile Phone Platform)|-- speex (Speex编/解码API的使用(libspeex))|--sqlite (数据库)|--srec (Nuance 公司提供的开源连续非特定人语音识别)|--strace (trace工具)|-- svox (Embedded Text-to-Speech)|--tagsoup (TagSoup是一个Java开发符合SAX的HTML解析器)|--tcpdump (抓TCP包的软件)|--tesseract (Tesseract Open Source OCR Engine.)|-- tinyxml (TinyXml is a simple, small, C++XML parser)|-- tremor (I stream and file decoder provides an embeddable,integer-only library)|--webkit (浏览器核心)|--wpa_supplicant (无线网卡管理)|--xmlwriter (XML 编辑工具)|--yaffs2 (yaffs文件系统) `--zlib (a general purpose data compression library) frameworks 目录 (核心框架——java及C++语言) .|-- base(基本内容)| |--api (?都是xml文件,定义了java的api?)| |--awt (AWT库)| |--build (空的)| |--camera (摄像头服务程序库)| |--cmds (重要命令:am、app_proce等)| |--core (核心库)| |--data (字体和声音等数据文件)| |--docs (文档)| |--graphics (图形相关)| |--include (头文件)| |--keystore (和数据签名证书相关)| |--libs (库)| |--location (地区库)| |--media (媒体相关库)| |--obex (蓝牙传输库)| |-- opengl (2D-3D加速库)| |--packages (设置、TTS、VPN程序)| |--sax (XML解析器)| |--services (各种服务程序)| |--telephony (电话通讯管理)| |-- test-runner (测试工具相关)| |--tests (各种测试)| |--tools (一些叫不上名的工具)| |--vpn (VPN)| `--wifi (无线网络)|--opt (可选部分)| |--com.google.android (有个framework.jar)| |--com.google.android.googlelogin (有个client.jar)| `--emoji (standard message elements) `--policies (Product policies are operating system directions aimed at specific uses) `-- base |--mid (MID设备) `--phone (手机类设备一般用这个,与锁屏有关的代码) hardware 目录 (部分厂家开源的硬解适配层HAL代码)|--broadcom (博通公司)| `--wlan (无线网卡)|--libhardware (硬件库)| |--include (头文件)| `--modules (Default (and possibly architecture dependents) HAL modules)| |--gralloc (gralloc显示相关)| `-- overlay (Skeleton for the "overlay"HAL module.)|--libhardware_legacy (旧的硬件库)| |--flashlight (背光)| |--gps (GPS)| |--include (头文件)| |--mount (旧的挂载器)| |--power (电源)| |--qemu (模拟器)| |--qemu_tracing (模拟器跟踪)| |--tests (测试)| |--uevent (uevent)| |--vibrator (震动)| `--wifi (无线)|--msm7k (高通7k处理器开源抽象层)| |--boot (启动)| |--libaudio (声音库)| |-- libaudio-qsd8k (qsd8k的声音相关库)| |--libcamera (摄像头库)| |--libcopybit (copybit库)| |--libgralloc (gralloc库)| |-- libgralloc-qsd8k (qsd8k的gralloc库)| |--liblights (背光库)| `--librpc (RPC库)|--ril (无线电抽象层)| |--include (头文件)| |--libril (库)| |-- reference-cdma-sms (cdma短信参考)| |-- reference-ril (ril参考)| `--rild (ril后台服务程序) `--ti (ti公司开源HAL)|--omap3 (omap3处理器)| |--dspbridge (DSP桥)| |--libopencorehw (opencore硬件库)| |--liboverlay (overlay硬件库)| |--libstagefrighthw (stagefright硬件库)| `--omx (omx组件) `--wlan (无线网卡) packages 目录 .|--apps (应用程序库)| |--AlarmClock (闹钟)| |--Bluetooth (蓝牙)| |--Browser (浏览器)| |--Calculator (计算器)| |--Calendar (日历)| |--Camera (相机)| |--CertInstaller (在Android中安装数字签名,被调用)| |--Contacts (拨号(调用)、联系人、通话记录)| |--DeskClock (桌面时钟)| |--Email (Email)| |--Gallery (相册,和Camera类似,多了列表)| |--Gallery3D (?3D相册)| |--GlobalSearch (为google搜索服务,提供底层应用)| |--GoogleSearch (google搜索)| |--HTMLViewer (浏览器附属界面,被浏览器应用调用,同时提供存储记录功能)| |--IM (即时通讯,为手机提供信号发送、接收、通信的服务)| |--Launcher (登陆启动项,显示图片框架等等图形界面)| |--Launcher2 (登陆启动项,负责应用的调用)| |--Mms (?彩信业务)| |--Music (音乐播放器)| |--PackageInstaller (安装、卸载程序的响应)| |--Phone (电话拨号程序)| |--Provision (预设应用的状态,使能应用)| |--Settings (开机设定,包括电量、蓝牙、设备信息、界面、wifi等)| |--SoundRecorder (录音机,可计算存储所需空间和时间)| |--Stk (接收和发送短信)| |-- Sync (空) -------○1 | |--Updater (空)| `--VoiceDialer (语音识别通话)|--inputmethods (输入法)| |--LatinIME (拉丁文输入法)| |--OpenWnn (OpenWnn输入法)| `--PinyinIME (拼音输入法)|--providers (提供器,提供应用程序、界面所需的数据)| |--ApplicationsProvider (应用程序提供器,提供应用程序启动项、更新等)| |--CalendarProvider (日历提供器)| |--ContactsProvider (联系人提供器)| |--DownloadProvider (下载管理提供器)| |--DrmProvider (创建和更新数据库时调用)| |--GoogleContactsProvider (联系人提供器的子类,用以同步联系人)| |--GoogleSubscribedFeedsProvider(设置信息提供器)| |--ImProvider (空)| |--ManagementProvider (空)| |--MediaProvider (媒体提供器,提供存储数据)| |--TelephonyProvider (彩信提供器)| |--UserDictionaryProvider (用户字典提供器,提供用户常用字字典)| `--WebSearchProvider (空)|--services| |--EasService (空)| `--LockAndWipe (空) `--wallpapers (墙纸)|--Basic (基本墙纸,系统内置墙纸)|--LivePicker (选择动态壁纸)|--MagicSmoke (壁纸特殊效果) `--MusicVisualization (音乐可视化,图形随音乐而变化) ○1里面有一个隐藏的.git文件夹,内容都是一样的,没有有意义的代码,config看似乎是一个下载程序,因此认为这些文件夹下没有实质东西。 prebuilt 目录 (x86和arm架构下预编译的一些资源) .|-- android-arm (arm-android相关)| |--gdbserver (gdb调试器)| `--kernel (模拟的arm内核)|-- android-x86 (x86-android相关)| `--kernel (空的)|--common (通用编译好的代码,应该是java的)|-- darwin-x86 (drawin x86平台)| `--toolchain (工具链)| |-- arm-eabi-4.2.1 | |-- arm-eabi-4.3.1 | `-- arm-eabi-4.4.0 |-- darwin-x86_64 (drawin x86 64bit平台)|-- linux-x86 (linux x86平台)| `--toolchain (工具链,我们应该主要用这个)| |-- arm-eabi-4.2.1 | |-- arm-eabi-4.3.1 | |-- arm-eabi-4.4.0 | `-- i686-unknown-linux-gnu-4.2.1(x86版编译器)|-- linux-x86_64 (linux x86 64bit平台)|--windows (windows平台) `-- windows-x86_64 (64bit windows平台) system 目录 (底层文件系统库、应用及组件——C语言) .|--Bluetooth (蓝牙相关)|--core (系统核心工具盒接口)| |--adb (adb调试工具)| |--cpio (cpio工具,创建img)| |--debuggerd (调试工具)| |--fastboot (快速启动相关)| |--include (系统接口头文件)| |--init (init程序源代码)| |--libacc (轻量级C编译器)| |--libctest (libc测试相关)| |--libcutils (libc工具)| |--liblog (log库)| |--libmincrypt (加密库)| |--libnetutils (网络工具库)| |--libpixelflinger (图形处理库)| |--libsysutils (系统工具库)| |--libzipfile (zip库)| |--logcat (查看log工具)| |--logwrapper (log封装工具)| |--mkbootimg (制作启动boot.img的工具盒脚本)| |--netcfg (网络配置netcfg源码)| |--nexus (google最新手机的代码)| |--rootdir (rootfs,包含一些etc下的脚本和配置)| |--sh (shell代码)| |--toolbox (toolbox,类似busybox的工具集)| `--vold (SD卡管理器)|--extras (额外工具)| |-- latencytop (a tool forsoftware developers ,identifying system latency happen)| |--libpagemap (pagemap库)| |--librank (Java Library Ranking System库)| |--procmem (pagemap相关)| |--procrank (Java Library Ranking System相关)| |--showmap (showmap工具)| |--showslab (showslab工具)| |--sound (声音相关)| |--su (su命令源码)| |--tests (一些测试工具)| `--timeinfo (时区相关) `--wlan (无线相关) `--ti (ti网卡相关工具及库) vendor 目录 (厂家定制内容)|--aosp (android open source project)| `--products (一些板级规则)|--htc (HTC公司)| |-- common-open (通用部分)| | `--akmd (解压img用的工具)| |-- dream-open (G1开放部分)| |-- prebuilt-open (预编译开放部分)| `-- sapphire-open (sapphire这款型号开放内容)|-- pv-open (没东西)|--qcom (里面基本是空的) `--sample (google提供的样例)|--apps (应用)| |--client (用户)| `--upgrade (升级)|--frameworks (框架)| `--PlatformLibrary (平台库)|--products (产品)|--sdk_addon (sdk添加部分) `--skins (皮肤) `-- WVGAMedDpi (WVGA适用的图片)
三、Android 源码的编译(make)
源码下载完成后接下来就是对源码的编译了,下载好源码后,会在android目录下有一个MakeFile文件,然后直接在终端下输入make既可以对android源码进行编译(make -j2双核电脑),也可月编译模块,android中的一个应用程序可以单独编译,在源码目录下执行 $ . build/envsetup.sh (.后面有空格)
就多出一些命令:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人:
$ mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests. apk
out/target/product/generic/system/app/Contacts.apk
可以使用
$ make systemimage - system.img
$ make userdataimage -userdata.img
$ make ramdisk - ramdisk.img
$ make snod - 快速打包system.img
重新生成system.img,再运行模拟器
在编译的过程中依然会出现很多的错误:
1,确保g++4.4和gcc4.4
错误内容:
将‘const android::RefBase::weakref_impl’作为‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’实参时丢弃了类型限定 [-fpermissive]
解决方法:
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
2,修改权限(chmod -R 777 *)
3,安装所需的包
1、/usr/bin/ld: cannot find -lz
1、/usr/bin/ld: cannot find -lz
错误内容:
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] Error 1
解决方法: sudo apt-get install zlib1g-dev
4,修改/build/core/combo/HOST_linux-x86.mk文件
错误内容:
host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp
<命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werror]
<built-in>:0:0: 附注: 这是先前定义的位置
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1
解决方法:
将/build/core/combo/HOST_linux-x86.mk文件以下语句:
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
修改为
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
5,错误内容:
target Executable: BufferQueue_test (out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test)
out/target/product/generic/obj/lib/libOpenSLES.so: undefined reference to `typeinfo for android::SortedVectorImpl'
out/target/product/generic/obj/lib/libOpenSLES.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
collect2: ld returned 1 exit status
make: *** [out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test] 错误
解决方法:
a.将system/media/opensles/libopensles下的IAndroidEffect.c文件重命名为IAndroidEffect.cpp
b.将同文件夹下的Android.mk中的IAndroidEffect.c改为IAndroidEffect.cpp
6,错误内容:
.../build_android.sh: line 75: mkimage:找不到命令
解决方法:
先从uboot/tools目录拷贝mkimage到usr/bin
四、在模拟器上运行编译好的android
$ emulator
运行的就是你编译的映像。执行emulator 命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而
Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img。模拟器运行需要这四个文件,如果你编译了内核则可以使用自己的Kernel镜像,可用于android移植等。(adnroid4.1.1下emulator不能直接运行的问题 参考:http://blog.csdn.net/dongminghao888/article/details/7860884)
编译好android之后,emulator在~/android/out/host/linux-x86/bin 下,ramdisk.img,system.img和userdata.img则在~/android/out/target/product /generic下
$ cd ~/android/out/host/linux-x86/bin
增加环境变量
$ emacs ~/.bashrc
在.bashrc中新增环境变量,如下
$ source ~/.bashrc
$ cd ~/android/out/target/product/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了
五、编译SDK
直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android了。
a)修改/frameworks/base/include/utils/Asset.h
‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’
原因是eclipse编译工程需要大于1.3M的buffer;
这一步,笔者编译的是主线程的,在Asset.h文件里没找到上面的常量,所以就没做这一步,但是也成功了。
b)编译ADT。
如果想用eclipse开发android应用程序,最好是安装ADT,这样就可以在eclipse下创建android的工程。
产生ADT eclipse plugins
$ development/tools/eclipse/scripts/build_server.sh ~/adt/
使用前建议设定一下ECLIPSE_HOME的环境变量,不然会以为没有装eclipse,然后帮你download下来。
c)执行make sdk
$ make sdk
编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是 SDK目录
编译SDK可以得到与源码同步的SDK,还会生成一些tools,在源码根目录下:
sudo make PRODUCT-sdk-sdk
编译生成的SDK在out/host/linux-x86/SDK下。之后如果在ubuntu下使用eclipse进行开发,可以使用你编译的SDK。
下面就在模拟器中运行镜像,建议切到root用户下,首先配置几个环境变量,将自己编译的SDK设为优先级最高,在源码根目录下执行:
update-alternatives --install /usr/bin/AndroidSDK AndroidSDK ./out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86 255
这样会在/etc/alternatives下生成一个指向该SDK目录的软连接AndroidSDK,这个目录主要存放一些系统默认打开的程序的信息和配置。那么/usr/bin/AndroidSDK就指向这个软连接。接着执行:
gedit ~/.bashrc
在文件末尾添加:
export ANDROID_SDK_HOME=/usr/bin/AndroidSDK export PATH=$ANDROID_SDK_HOME/tools:$PATH export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
六、编译linux内核映像
a)准备交叉编译工具链
android代码树中有一个prebuilt项目,包含了我们编译内核所需的交叉编译工具。
b)设定环境变量
$ emacs ~/.bashrc
增加如下两行:
export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/ arm-eabi-4.4.0/bin
export ARCH=arm
保存后,同步变化:
$ source ~/.bashrc
c)获得合适的内核源代码
$ cd ~/android
获得内核源代码仓库(也可在http://code.google.com/p/android/downloads/list?can=1&q=下载linux-2.6.23-android-m5-rc14.tar.gz)
git clone git://android.git.kernel.org/kernel/common.git kernel $ cd kernel $ git branch
显示 * android-2.6.27
说明你现在在android-2.6.27这个分支上,也是kernel/common.git的默认主分支。
显示所有head分支:
$ git branch -a
显示 * android-2.6.27
remotes/origin/HEAD -> origin/android-2.6.27
remotes/origin/android-2.6.25
remotes/origin/android-2.6.27
remotes/origin/android-2.6.29
remotes/origin/android-goldfish-2.6.27
remotes/origin/android-goldfish-2.6.29
我们选取最新的android-goldfish-2.6.29,其中goldfish是android的模拟器模拟的CPU。
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$ git branch
显示 android-2.6.27
* android-goldfish-2.6.29
我们已经工作在android-goldfish-2.6.29分支上了。
d)设定交叉编译参数
打开kernel目录下的Makefile文件,把CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器
CROSS_COMPILE ?= arm-eabi-
把 LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
$(call ld-option, -Wl$(comma) build-id,))
这一行注释掉,并且添加一个空的LDFLAGS_BUILD_ID定义,如下:
LDFLAGS_BUILD_ID =
e)编译内核映像
$ cd ~/android/kernel
$ make goldfish_defconfig
$ make
f)测试生成的内核映像
$ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage
安装交叉编译器:(参考:http://blog.chinaunix.net/uid-10995602-id-2918733.html)
将arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 解压缩至/usr/local/arm-2007q3目录下,并将其bin路径添加到PATH中:
$ export PATH=$PATH:/usr/local/arm-2007q3/bin
转至:
http://blog.csdn.net/stephen255/article/details/13511467
------------------------
转载于:https://www.cnblogs.com/Ph-one/p/4911967.html
android源码编译1相关推荐
- Android 源码编译及常见错误及解决方法
Android 源码编译及常见错误及解决方法 参考文章: (1)Android 源码编译及常见错误及解决方法 (2)https://www.cnblogs.com/kyyblabla/p/360393 ...
- 【Android开发】构建Android源码编译环境
原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 123456789 10 11 12 13 14 15 16 17 18 $ su ...
- android源码编译出错的原因
(1)gcc的版本过高,由于android源码编译要求为4.3,如果你的gcc版本为4.4,那你的编译可能会失败的!我的系统是ubuntu 10.04,默认的gcc版本为4.4,gcc-4.4太严格, ...
- [Android Pro] Android源码编译之Nexus5真机编译
reference to : http://blog.csdn.net/liu1075538266/article/details/51272398 1. 前言 在Android安全的研究工作中, ...
- Android 源码编译详解【合集篇】
Android 源码编译详解[一]:服务器硬件配置及机型推荐 做 Android系统开发多年,开发环境都是入职就搭建好了,入职时拿个账号密码就直接开始搞开发了,年初换了新公司,所有的项目都是刚起步,一 ...
- Android源码编译(基于Ubuntu18.0.4)
文章目录 一.环境搭建 硬件要求 软件要求 操作系统和 JDK 主要软件包 软件安装 Git安装 repo工具安装 安装 openJDK 8 其他依赖安装 二.源码下载 建立源码文件夹 初始化仓库 源 ...
- Android 源码编译技巧--模块清理
参考之前的 Android 源码编译技巧–模块编译_南国樗里疾的博客-CSDN博客 https://blog.csdn.net/weixin_44021334/article/details/1069 ...
- Android源码编译make的错误处理
https://www.linuxidc.com/Linux/2011-11/47411.htm Android源码下载:官方下载 或参考android源码下载方式 Android编译版本: PLAT ...
- linux系统编译时make出错,Android源码编译make的错误处理
Android编译版本:PLATFORM_VERSION=4.0.1(最新Android 4.0.1) OS 操作系统平台: Linux yanggang 2.6.35-30-generic #61- ...
- Android源码编译环境搭建教程 (一) - Ubuntu系统构建
Android源码编译环境搭建教程 (一) - Ubuntu系统构建 本教程为感兴趣的同学提供Android源码编译的环境搭建,当然这里都是基于windows系统,mac系统也差不多,将相应的软件替换 ...
最新文章
- 编写nios-shell时想到的问题-回车vs换行
- 费解!为什么那么多人用“ji32k7au4a83”作密码?
- python sys.argv 默认值
- jeecms v9 vue环境搭建
- MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)
- alter system flush shared_pool的作用 .
- Cloud Toolkit 部署应用到阿里云轻量应用服务器
- 几种简单的负载均衡算法及其 Java 代码实现
- codeblock 设置背景颜色
- 打包Hololens2 VS error MSB3774: 找不到 SDK“WindowsMobile, Version=10.0.19041.0”解决办法
- Windows照片图片便捷查看分类软件——照片分类猫
- wien10 / win11双开微信
- Django使用manager.py 运行项目,或者uWSGI进行部署项目,使用Nginx进行负载均衡
- Robot Framework(十三):使用RF进行web测试(下)
- iOS 控制任务执行顺序
- 注册电气工程师职业资格考试
- Linux鸟哥的私房菜(第五章 文件权限以及目录配置)
- R语言学习笔记 07 Probit、Logistic回归
- The Tao Of Programming —— 编程之道
- Pandora数据工厂之概述
热门文章
- 有房间匹配和无房间匹配
- assimp批量转模型_IGS模型批量转换成STL模型
- vue路由报错Navigating to current location (“/login“) is not allowed踩坑总结
- Vue提示 : Named Route ‘test‘ has a default child route. When navigating to this named route (:to=“{nam
- 浅谈脑机接口:传统神经学科的颠覆者
- Qt在线安装器下载快的办法
- Android手机界面组成
- python中的dic.items(), dic.keys(), dic.values()
- 模糊控制(二)模糊控制——模糊推理
- Excel - 如何在 Excel 表格的一个单元格内换行?