android环境搭建 编译大全.docx
- 文档编号:26682631
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:24
- 大小:23.84KB
android环境搭建 编译大全.docx
《android环境搭建 编译大全.docx》由会员分享,可在线阅读,更多相关《android环境搭建 编译大全.docx(24页珍藏版)》请在冰豆网上搜索。
android环境搭建编译大全
Android编译大全
Android编译大全
(一)
1.编译前的准备
1.1.编译环境准备
v先构建一个Ubuntu9.10虚拟机
v在虚拟机中确认下面的包是否已经安装:
nsudoapt-getinstallbuild-essential
nsudoapt-getinstallmake
nsudoapt-getinstallgcc
nsudoapt-getinstallg++
nsudoapt-getinstalllibc6-dev
nsudoapt-getinstallflex
nsudoapt-getinstallbison
nsudoapt-getinstallpatch
nsudoapt-getinstalltexinfo
nsudoapt-getinstalllibncurses-dev
nsudoapt-getinstallgit-coregnupg//(gnupg系统可能已自带)
nsudoapt-getinstallflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuildessential
zipcurl
nsudoapt-getinstallncurses-dev
nsudoapt-getinstallzlib1g-dev
nsudoapt-getinstallvalgrind
nsudoapt-getinstallpython2.5(Ubuntu可能已经自带)
nsudoapt-getinstallsun-java5-jdk(Ubuntu9.10里面已经用1.6替换了1.5,需要重新下载一
个1.5)
v下载repo脚本,加上可执行权。
n$curlhttp:
//android.git.kernel.org/repo>repo
n$sudochmoda+xrepo
注:
本文档以Froyo版本为基础进行编译。
1.2.Sourcecode的获取
v在源码存放目录android中执行
$repoinit-ugit:
//codeaurora.org/platform/manifest.git-bcarrot.cupcake
-mM7201JSDCBALYA6380.xml
就可以获得代码了
关于-b和-m参数的说明参见:
https:
//www.codeaurora.org/wiki/QAEP
v执行reposync就可以开始下载源码了
$reposync
(漫长的过程,视速度而言需要半天以上)
Android编译大全
(二)
2.编译源代码
v执行ls-la/bin/sh命令,如果输出如下:
rwxrwxrwx1rootroot42010-02-1017:
14/bin/sh->dash
请执行$sudodpkg-reconfiguredash命令修改sh版本,并选择“否”;
此处如果不改好的话,编译时会出现错误。
v执行sourcebuild/envsetup.sh命令
v执行choosecombo命令,出现选择对话框
uBuildforthesimulatororthedevice?
u1.Device
u2.Simulator
u
uWhichwouldyoulike?
[1]
u
uBuildtypechoicesare:
u1.release
u2.debug
u
uWhichwouldyoulike?
[2]
u
uProductchoicesare:
u1.core
u2.full_dream
u3.full
u4.full_passion
u5.full_sapphire
u6.generic_dream
u7.generic
u8.generic_passion
u9.generic_sapphire
u10.msm7625_qrd
u11.msm7627_ffa
u12.msm7627_surf
u13.msm7630_surf
u14.qsd8250_ffa
u15.qsd8250_surf
u16.sample_addon
u17.sdk
u18.sim
uYoucanalsotypethenameofaproductifyouknowit.
uWhichproductwouldyoulike?
[generic]3
u
uVariantchoicesare:
u1.user
u2.userdebug
u3.eng
uWhichwouldyoulike?
[eng]
如果执行这个命令的时候,报错:
/bin/sh:
Syntaxerror:
"("unexpected
#请执行$sudodpkg-reconfiguredash命令,并选择“否”;
v配置环境变量
exportJAVA_HOME=/usr/lib/jvm/java-5-sun
exportCLASSPATH=$JAVA_HOME/lib
exportJRE_HOME=$JAVA_HOME/jre
exportJAVA_PATH=$JAVA_HOME/bin:
$JRE_HOME/bin
exportCLASSPATH=.:
$JAVA_HOME/lib:
$JRE_HOME/lib:
$JAVA_HOME/lib/dt.jar:
$JAVA_HOME/lib/tools.jar
exportANDROID_JAVA_HOME=$JAVA_HOME
exportPATH=$JAVA_PATH:
$PATH
v执行make命令
如果安装的是java1.6,将报错,如下:
Yourversionis:
javaversion"1.6.0_15".
Thecorrectversionis:
1.5.
解决java编译错误,如下:
1)下载jdk1.5(ftp:
//202.112.80.252/java/jdk-1_5_0_21-linux-i586.bin);
2)将jdk-1_5_0_21-linux-i586.bin变为可执行权限
$sudochmoda+xjdk-1_5_0_21-linux-i586.bin
3)在命令行下执行./jdk-1_5_0_21-linux-i586.bin安装sdk
4)建立一个软连接到jdk目录
$sudolnjdk1.5.0_21/java-5-sun-s
5)然后配置环境变量:
sudogedit/etc/enviroment在其中添加两行:
CLASSPATH=/usr/lib/jvm/java-5-sun/lib
JAVA_HOME=/usr/lib/jvm/java-5-sun
如果在出现类似使用了旧版api的错误,请先按照提示执行makeupdate-api命令。
该命令执行结束
之后,再继续执行make命令就可以编译成功了。
在配置好shell命令类型之后,也可以新建一个shell脚本如下,进行自动编译:
exportJAVA_HOME=/usr/lib/jvm/java-5-sun
exportCLASSPATH=$JAVA_HOME/lib
exportJRE_HOME=$JAVA_HOME/jre
exportJAVA_PATH=$JAVA_HOME/bin:
$JRE_HOME/bin
export
CLASSPATH=.:
$JAVA_HOME/lib:
$JRE_HOME/lib:
$JAVA_HOME/lib/dt.jar:
$JAVA_HOME/lib
/tools.jar
exportANDROID_JAVA_HOME=$JAVA_HOME
exportPATH=$JAVA_PATH:
$PATH
sourcebuild/envsetup.sh
choosecombo1173
make
build之后的log如下:
……
creatingboot.img...
creatingrecovery.img...
creatingsystem.img...
creatinguserdata.img...
cleaningup...
Done.
Android编译大全(三)
3.验证编译之后的模块
$exportANDROID_PRODUCT_OUT=
$cd./out/host/linux-x86/bin
$./emulator
4.编译完成之后的代码结构
Android编译完成后,将在根目录中生成一个out文件夹,所有生成的内容均放置在这个文件夹中。
out文件夹如下所示:
out/
|--CaseCheck.txt
|--casecheck.txt
|--host
||--common
|`--linux-x86
`--target
|--common
`--product
主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(模认
为ARMv5)运行的内容。
host目录的结构如下所示:
out/host/
|--common
|`--obj(JAVA库)
`--linux-x86
|--bin(二进制程序)
|--framework(JAVA库,*.jar文件)
|--lib(共享库*.so)
`--obj(中间生成的目标文件)
host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序。
target目录的结构如下所示:
out/target/
|--common
||--R(资源文件)
||--docs
|`--obj(目标文件)
`--product
`--generic
其中common目录表示通用的内容,product中则是针对产品的内容。
在common目录的obj中,包含两个重要的目录:
APPS中包含了JAVA应用程序生成的目标,每个应用程序对应其中一个子目录,将结合每个应
用程序的原始文件生成Android应用程序的APK包。
JAVA_LIBRARIES中包含了JAVA的库,每个库对应其中一个子目录。
在默认的情况下,Android编译将生成generic目录,如果选定产品还可以生成其他的目录。
generic包含了以下内容:
out/target/product/generic/
|--android-info.txt
|--clean_steps.mk
|--data
|--obj
|--ramdisk.img
|--root
|--symbols
|--system
|--system.img
|--userdata-qemu.img
`--userdata.img
在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成
了APK包。
system目录是主要的文件系统,data目录是存放数据的文件系统。
obj/SHARED_LIBRARIES中存放所有动态库。
obj/STATIC_LIBRARIES中存放所有静态库。
几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,
system.img是主要文件系统的映像,这是一个比较大的文件,data.img是数据内容映像。
这几个
image文件是运行时真正需要的文件。
5.makeSDK
5.1.sdk编译
在编译完整个系统之后,再运行makesdk,就可以进行sdk的编译了。
makesdk将各种工具和
image打包,供开发和调试使用。
exportJAVA_HOME=/usr/lib/jvm/java-5-sun
exportCLASSPATH=$JAVA_HOME/lib
exportJRE_HOME=$JAVA_HOME/jre
exportJAVA_PATH=$JAVA_HOME/bin:
$JRE_HOME/bin
export
CLASSPATH=.:
$JAVA_HOME/lib:
$JRE_HOME/lib:
$JAVA_HOME/lib/dt.jar:
$JAVA_HOME/lib
/tools.jar
exportANDROID_JAVA_HOME=$JAVA_HOME
exportPATH=$JAVA_PATH:
$PATH
sourcebuild/envsetup.sh
makesdk
……
PackageSDKStubs:
out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar
PackageSDK:
out/host/linux-x86/sdk/android-sdk_eng.huangjx_linux-x86.zip
build之后的log如下:
5.2.验证编译之后的模块
将out/host/linux-x86/sdk/android-sdk_eng.huangjx_linux-x86.zip解压到本地目录。
进入
tools目录,输入下面的命令创建AVD:
$./androidcreateavd-t1-c128M-nfroyo-sHVGA
Android2.2isabasicAndroidplatform.
Doyouwishtocreateacustomhardwareprofile[no]
CreatedAVD'froyo'basedonAndroid2.2,withthefollowinghardwareconfig:
hw.lcd.density=160
输入下面的命令,启动模拟器:
$./emulator-avdfroyo-partition-size160&
Android编译大全(四)
6.编译详细分解
6.1.build系统简介
6.1.1.build系统文件结构
./build
|--CleanSpec.mk
|--buildspec.mk.default
|--core
||--Makefile
||--apicheck_msg_current.txt
||--apicheck_msg_last.txt
||--armelf.x
||--armelf.xsc
||--armelflib.x
||--base_rules.mk
||--binary.mk
||--build-system.html
||--build_id.mk
||--checktree
||--cleanbuild.mk
||--cleanspec.mk
||--clear_vars.mk
||--combo
|||--HOST_darwin-x86.mk
|||--HOST_linux-x86.mk
|||--HOST_windows-x86.mk
|||--TARGET_linux-arm.mk
|||--TARGET_linux-sh.mk
|||--TARGET_linux-x86.mk
|||--arch
|||`--arm
||||--armv4t.mk
||||--armv5te-vfp.mk
||||--armv5te.mk
||||--armv7-a-neon.mk
|||`--armv7-a.mk
|||--javac.mk
||`--select.mk
||--config.mk
||--copy_headers.mk
||--definitions.mk
||--device.mk
||--distdir.mk
||--droiddoc.mk
||--dynamic_binary.mk
||--envsetup.mk
||--executable.mk
||--filter_symbols.sh
||--find-jdk-tools-jar.sh
||--host_executable.mk
||--host_java_library.mk
||--host_prebuilt.mk
||--host_shared_library.mk
||--host_static_library.mk
||--java.mk
||--java_library.mk
||--key_char_map.mk
||--main.mk
||--multi_prebuilt.mk
||--node_fns.mk
||--notice_files.mk
||--package.mk
||--pathmap.mk
||--prebuilt.mk
||--prelink-linux-arm-2G.map
||--prelink-linux-arm.map
||--process_wrapper.sh
||--process_wrapper_gdb.cmds
||--process_wrapper_gdb.sh
||--product.mk
||--product_config.mk
||--proguard.flags
||--proguard_tests.flags
||--raw_executable.mk
||--raw_static_library.mk
||--root.mk
||--shared_library.mk
||--static_java_library.mk
||--static_library.mk
||--tasks
|||--apicheck.mk
|||--cts.mk
|||--product-graph.mk
||`--sdk-addon.mk
|`--version_defaults.mk
|--envsetup.sh
|--libs
|`--host
||--Android.mk
||--CopyFile.c
||--include
||`--host
|||--CopyFile.h
|||--Directories.h
||`--pseudolocalize.h
||--list.java
|`--pseudolocalize.cpp
|--target
||--board
|||--Android.mk
|||--emulator
||||--AndroidBoard.mk
||||--BoardConfig.mk
||||--README.txt
||||--tuttle2.kcm
|||`--tuttle2.kl
|||--generic
||||--AndroidBoard.mk
||||--BoardConfig.mk
||||--README.txt
||||--system.prop
||||--tuttle2.kcm
|||`--tuttle2.kl
||`--sim
|||--AndroidBoard.mk
||`--BoardConfig.mk
|`--product
||--AndroidProducts.mk
||--core.mk
||--full.mk
||--generic.mk
||--languages_full.mk
||--languages_small.mk
||--sdk.mk
||--security
|||--README
|||--media.pk8
|||--media.x509.pem
|||--platform.pk8
|||--platform.x509.pem
|||--shared.pk8
|||--shared.x509.pem
|||--testkey.pk8
||`--testkey.x509.pem
|`--sim.mk
Android编译大全(五)
6.1.2.make文件分类
²配置类
主要用来配置product、board,以及根据你的Host和Target选择相应的工具以及设定相应的通用
编译选项:
config文件
说明
build/core/config.mk
Config文件的概括性配置
build/core/envsetup.mk
generate目录构成等配置
build/target/product
产品相关的配置
build/target/board
硬件相关的配置
build/core/combo
编译选项配置
这里解释下这里的board和product。
board主要是设计到硬件芯片的配置,比如是否提供硬件的某
些功能,比如说GPU等等,或者芯片支持浮点运算等等。
product是指针对当前的芯片配置定义你将
要生产产品的个性配置,主要是指APK方面的配置,哪些APK会包含在哪个product中,哪些APK
在当前product中是不提供的。
config.mk是一个总括性的东西,它里面定义了各种module编译所需要使用的HOST工具以及如何
来编译各种模块,比如说BUILT_PREBUILT就定义了如何来编译预编译模块。
envsetup.mk主要会
读取由envsetup.sh写入环境变量中的一些变量来配置编译过程中的输出目录,combo里面主要定义
了各种Host和Target结合的编译器和编译选项。
²模块组织类
这类文件主要定义了如何来处理Module的Android.mk,以及采用何种方式来生成目标模块,这些模
块生成规则都定义在config.mk里面。
我们可以看看:
CLEAR_VARS:
=$(BU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android环境搭建 编译大全 android 环境 搭建 编译 大全