【Android 系统】编译android源码学习

Android 系统
make -v 检查系统中GNU Make的版本

Makefile带来的好处就是分模块来管理源程序工程和自动化编译
Android编译系统的入口文件位于$ANDROID_HOME目录下
在Android编译系统中,GNU Makefile文件名为Android.mk,它说明如何编译特定的应用程序,一般包含的元素:
(1)名称。即编译后的文件名,格式为:LOCAL_MODULE :=<build_name>
(2)局部变量。使用下面的格式清除编译期间会使用到的局部变量:include $(CLEAR_VARS)
(3)文件。即应用程序依赖的文件,格式为:LOCAL_SRC_FILES :=main.c
(4)标签。有必要的可以定义的一些标签,格式为:LOCAL_MODULE_TAGS :=eng development
(5)共享库。即应用程序需要链接的共享库,格式为:LOCAL_SHARED_LIBRARIES :=cutils
(6)模板文件。把模板文件包含进来以便让Make工具知道将生成什么目标文件,格式为:include $(BUILD_EXECUTABLE)

简单APK应用程序包的Makefile文件代码:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES :=$(call all-subdir-java-files)
LOCAL_PACKAGE_NAME :=localPackage
include $(BUILD_PACKAGE)

其中,目标应用程序名为localPackage,apk;include $(BUILD_PACKAGE)表示编译的目标应用程序包的类型为APK。引用已存在jar文件的代码

是LOCAL_STATIC_JAVA_LIBRARIES :=static-library。使用平台的密钥是通过指定LOCAL_CERTIFICATE变量的值为platform来实现的。使用特

定产商的密钥是通过指定LOCAL_CERTIFICATE变量的值为vendor/example/certs/app来实现的

已编译好的APK的Makefile文件代码:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=localModuleName
LOCAL_SRC_FILES :=$(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS :=APPS
LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

include $(BUILD_PREBUILT)表示预编译的目标应用程序包

Android系统编译环境搭建
1.安装git

$ sudo apt-get install git-core

2.安装repo
创建存放repo目录:

$ cd ~ 
$mkdir bin
$export PATH=~/bin;$PATH

3.初始化repo
下载repo,并改变权限:

$ curl http://android.git.kernel.org/repo >~/bin/repo
$chmod a+x ~/bin/repo

4.安装JDK
查看当前正使用的Java和Javac版本命令:
sudo update-alternatives –config java sudo update-alternatives –config javac

$ sudo apt-get install sun-java6-jdk

然后再~/.bashrc文件中添加环境变量JAVA_HOME和ANDROID_JAVA_HOME;
$ sudo vim ~/.bashrc
在.bashrc文件的最后加入如下两行:

export JAVA_HOME=/usr/lib/jvm/java-6-sum
export ANDROID_JAVA_HOME=$JAVA_HOME

完成后使用如下命令更新:

$ sudo source ~/.bashrc

之后,测试环境变量是否设置好

$echo $ANDROID_JAVA_HOME
$echo $JAVA_HOME

运行java-version,提示。。。。。说明已经成功安装
5.安装依赖和程序
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev

zliblg-dev
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zliblg-dev gcc-multilib g++-multilib libc6

-dev-i386 lib32ncurses5-dev ia32-libs x1lproto-core-dev libxll-dev lib32readline5-dev lib32z-dev java-common unixodbc

编译源代码
在命令行运行emulator &,需要设置环境变量PATH和ANDROID_PRODUCT_OUT。在~/.bashrc文件添加环境变量的代码:

export ANDROID_PRODUCT_OUT=$ANDROID_HOME/out/target/product/generic
export PATH=$PATH:$ANDROID_HOME/out/host/linux-x86/bin

如果想使用命令DDMS &来可视化地查看启动的Log信息,还需加上
export ANDROID_SWT=$ANDROID_HOME/out/host/linux-x86/framework

编译Android内核
1.设置环境变量
在~/.bashrc文件末尾加入环境变量:

export PATH=$PATH:/android23/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
export ARCH=arm

2.设定交叉编译参数
进入$ANDROID_HOME/kernel/common目录,修改其Makefile文件,
ARCH = arm
CROSS_COMPILE = arm-eabi-
3.编译内核
在$ANDROID_HOME/kernel/common目录下运行命令 make goldfish_defconfig配置编译选项,然后输入命令make编译内核,如果编译成功,看

到信息:kernel:arch/arm/boot/zImage is ready
4.测试自己编译的内核
命令:$emulator -kernel /android23/kernel/common/arch/arm/boot/zImage

5.Android NDK 是一套开发工具,允许Android应用开发者使用C、C++语言开发效率敏感的程序,将其编译成共享库(以so文件的形式),加入到应用程序apk文件中,通过JNI方式调用这些共享库的函数。

6.Android.mk文件的作用是向Android NDK编译系统描述系统C\C++源代码文件如何组织编译的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值