~~~my~~~

正确的编译android sdk:

cd myandroid

. ./build/envsetup.sh

lunch sdk-eng

make sdk

//或者:

make PRODUCT-sdk-sdk

这样就会在out/host/linux-x86/sdk/目录下生成跟google

发布的sdk包一样的目录,就可以使用自己的sdk开发包了。

make snod //生成system.img

make sdk showcommands //显示编译时的详细信息

运行模拟器:

. build/envsetup.sh

lunch 1 或者 lunch

sdk-eng //加载运行环境

export

PATH=/home/vnify/software/jdk1.5.0_04/bin/:$PATH //设置java,我的默认为1.6

export

ANDROID_SDK_ROOT=./out/host/linux-x86/sdk/android-sdk_eng.vnify_linux-x86/

emulator -avd wvga800 -skin WVGA800 //运行指定的虚拟设备和皮肤

调试:

ddms &

~~~my~~~

1、Git的安装

在Ubuntu

8.04上安装git只要设定了正确的更新源,然后使用apt-get就可以了,有什么依赖问题,就让它自己解决吧。其中cURL是一个利用URL语法在命令行下工作的文件传输工具,会在后面安装Repo的时候用到。

sudo apt-get install git-core curl

2、安装Repo

首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它(~/bin)加到PATH环境变量中

接下来通过cURL来下载Repo脚本,保存到~/bin/repo文件中

curl http://android.git.kernel.org/repo

>~/bin/repo

别忘了给repo可执行权限

chmod a+x ~/bin/repo

3、初始化版本库

如果是想把Android当前主线上最新版本的所有的sourcecode拿下来,我们需要repo的帮助。

先建立一个目录,比如~/android,进去以后用repo init命令即可。

repo init -u

git://android.git.kernel.org/platform/manifest.git

这个过程会持续很长的时间(至少可以好好睡一觉),具体要多少时间就取决于网络条件了

最后会看到 repo initialized in

/android这样的提示,就说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。

如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:

repo init -u git://android.git.kernel.org/platform/manifest.git -b

cupcake

另一种情况是,我们只需要某一个project的代码,比如kernel/common,就不需要repo了,直接用Git即可。

git clone git://android.git.kernel.org/kernel/common.git

这也需要不少的时间,因为它会把整个Linux Kernel的代码复制下来。

如果需要某个branch的代码,用git

checkout即可。比如我们刚刚拿了kernel/common.get的代码,那就先进入到common目录,然后用下面的命令:

git checkout origin/android-goldfish-2.6.27 -b goldfish

这样我们就在本地建立了一个名为goldfish的android-goldfish-2.6.27分支,代码则已经与android-goldgish-2.6.27同步。我们可以通过git

branch来列出本地的所有分支。

4、同步版本库

使用rerpo sync命令,我们把整个Android代码树做同步到本地,同样,我们可以用类似

repo sync project1 project2 …

这样的命令来同步某几个项目

如果是同步Android中的单个项目,只要在项目目录下执行简单的

git pull

即可。

5、通过GitWeb下载代码

另外,如果只是需要主线上某个项目的代码,也可以通过GitWeb下载,在shortlog利用关键字来搜索特定的版本,或者找几个比较新的tag来下载还是很容易的。

-----------------------------------

android编译全过程

2009-11-05 15:00本 文主要参考官方文档(http://source.android.com/download)和网上相关资料(http:

//blog.csdn.net/HKjinzhao/archive/2009/03/18/4002326.aspx,http:

//www.williamhua.com/2009/04/30/how-to-build-android-15-kernel-image/)。网

上的资料对于andorid的最新代码有的已经过时,或者有错误,这份文档本人亲自实验,保证可行。另本人没有使用eclipse的习惯,所以并没有做

eclipse的相关配置。

编译环境:ubuntu9.10,widnows平台目前不被支持。

1)安装必要的软件环境

$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison

gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip

curl libncurses5-dev zlib1g-dev

官方推荐的就是上面这些,如果在编译过程中发现某些命令找不到,就apt-get它。可能需要的包还有:

$ sudo apt-get install make

$ sudo apt-get install gcc

$ sudo apt-get install g++

$ sudo apt-get install libc6-dev

$ sudo apt-get install patch

$ sudo apt-get install texinfo

$ sudo apt-get install zlib1g-dev

$ sudo apt-get install valgrind

$ sudo apt-get install python2.5(或者更高版本)

需要注意的是,官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5-

jdk。经测试发现,如果仅仅make(make不包括make sdk),用sun-java6-jdk是没有问题的。而make

sdk,就会有问题,严格来说是在make doc出问题,它需要的javadoc版本为1.5。

因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者只安装sun-java5-jdk。这里sun-java6-

jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和javadoc。因为只有这两个是make

sdk用到的。这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:

$ sudo apt-get install sun-java6-jdk

修改javadoc的link

$ cd /etc/alternatives

$ sudo rm javadoc.1.gz

$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz

javadoc.1.gz

$ sudo rm javadoc

$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

2)设置环境变量

$ emacs ~/.bashrc

在.bashrc中新增或整合PATH变量,如下:

#java 程序开发/运行的一些环境变量

JAVA_HOME=/usr/lib/jvm/java-6-sun

JRE_HOME=${JAVA_HOME}/jre

export ANDROID_JAVA_HOME=$JAVA_HOME

export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

export JAVA_HOME;

export JRE_HOME;

export CLASSPATH;

HOME_BIN=~/bin/

export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

保存后,同步更新:

source ~/.bashrc

3)安装repo(用来更新android源码)

创建~/bin目录,用来存放repo程序,如下:

$ cd ~

$ mkdir bin

并加到环境变量PATH中,在第2步中已经加入

下载repo脚本并使其可执行:

$ curl http://android.git.kernel.org/repo

>~/bin/repo

$ chmod a+x ~/bin/repo

4)初始化repo

repo是android对git的一个封装,简化了一些git的操作。

创建工程目录:

$ mkdir android

$ cd android

repo初始化

$ repo init -u

git://android.git.kernel.org/platform/manifest.git

在此过程中需要输入名字和email地址。初始化成功后,会显示:

repo initialized in /android

在~/android下会有一个.repo的隐藏目录。

5)同步源代码

$ repo sync

这一步要很久很久

6)编译android源码,并得到~/android/out目录

$ cd ~/andoird

$ make PRODUCT-sdk-sdk

这一过程很久

或者:

. ./build/envsetup.sh

lunch sdk-eng

make sdk

7)在模拟器上运行编译好的android

编译好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中新增环境变量,如下

#java 程序开发/运行的一些环境变量

export

ANDROID_PRODUCT_OUT=~/android/out/target/product/generic

ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin

export

PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

最后,同步这些变化:

$ source ~/.bashrc

$ cd ~/android/out/target/product/generic

$ emulator -system system.img -data userdata.img -ramdisk

ramdisk.img

最后进入android桌面,就说明成功了。

8)编译模块

android中的一个应用程序可以单独编译,编译后要重新生成system.img

在源码目录下执行

$ . 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 snod

重新生成system.img,再运行模拟器

9)编译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;

b)编译ADT。

由于本人不使用eclipse,所以没有进行这步;

c)执行make sdk。

注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk

$ 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目录

实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来

此后的应用开发,就在该SDK上进行,所以把7)对于~/.bashrc的修改注释掉,增加如下一行:

export

PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools

注意要把xxx换成真实的路径;

# make PRODUCT-sdk-sdk

d)关于环境变量、android工具的选择

目前的android工具有:

A、我们从网上下载的SDK,如果你下载过的话( tools下有许多android工具,lib/images下有img映像)

B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)

C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)

那么我们应该用那些工具和img呢?

首先,我们一般不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。其次,也不会用C选项的工具和img,因为这些工具和img没有经过

SDK的归类处理,会有工具和配置找不到的情况;事实上,make

sdk产生的很多工具和img,在make编译出来out目录的时候,已经编译产生了,make sdk只是做了copy而已。

e)安装、配置ADT

略过;

f)创建Android Virtual Device

编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:

$ android list

创建AVD:

$ android create avd -t 1 -n myavd

可以android –help来查看上面命令选项的用法。创建中有一些选项,默认就行了

再执行android list,可以看到AVD存放的位置

以后每次运行emulator都要加-avd myavd或@myavd选项:

$ emulator -avd myavd

10)编译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

获得内核源代码仓库

$ 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

-----------------------------------

Android tools

======= adb =======

#运行monkey程序,进行随机输入测试

$ adb shell monkey -v -p com.android.email 500

#查看system's log buffers

$ adb logcat

#Viewing stdout and stderr

$ adb shell stop

$ adb shell setprop log.redirect-stdio true

$ adb shell start

#view a log buffer containing radio and telephony messages

$ adb logcat -b

radio # radio, events, main is default

#Filtering Log Output

$ adb logcat ActivityManager:I MyApp:D *:S

======= emulator =======

#运行模拟器

$ emulator -system system.img.orig -data userdata.img -ramdisk

ramdisk.img @my_avd

$ emulator @my_avd

#运行模拟器,并显示Linux kernel启动时的message

$ emulator -show-kernel @my_avd

#enable root shell on current terminal

$ emulator -shell @my_avd

# -wipe-data delete the emulator's user-data partition

emulator -wipe-data @my_avd

emulator -partition-size 256 -system D:\rom\system.img -data

d:\rom\userdata.img -kernel d:\rom\kernel-qemu -ramdisk

d:\rom\ramdisk.img -sdcard D:\android\sdk\1.6\sd64.img -cpu-delay

0

-scale 160dpi -dpi-device 240 -skin WVGA800 -skindir

D:\android\sdk\1.6\platforms\android-2.1\skins -memory 512

-prop

dalvik.vm.heapsize=32m

具体解释一下:

-partition-size 可以设置分区的大小,是system和data两个分区,一起设置

-cpu-delay 可以模拟速度慢的cpu

-scale 可以缩小或扩大其显示dpi

-dpi-device 可以设置hdpi或者mdpi等

-skin必须配合-skindir使用

-memory是设置内存大小,缺省是96m,如果不设置大一些,大家都很看到不停地kill and start

-prop dalvik.vm.heapsize=32m

这个是非常重要的设置,在我们的hdpi下,不设置成24m+就会系统无法启动

======= trace =======

# tracing

// start tracing to "/sdcard/calc.trace", onCreate()

Debug.startMethodTracing("calc");

// ...

// stop tracing, onDestroy()

Debug.stopMethodTracing();

adb pull /sdcard/calc.trace /tmp

traceview /tmp/calc

#

按F9启动/停止trace记录,在~/.android/avd/my_avd.avd/traces/目录下可以找到trace文件

$ emulator -trace trace_log

# 进入android源代码目录

$ cd $ANDROID_HOME

$ source build/envsetup.sh

# 运行envsetup.sh中的tracedmdump函数

$ tracedmdump ~/.android/avd/my_avd.avd/traces/trace_log

会在~/.android/avd/my_avd.avd/traces/trace_log下产生dmtrace和dmtrace.html文件

======= apk =======

# 将apk/目录下的所有文件打包成apk

$ apkbuilder jfo.apk -rf apk/

# 或者使用aapt

$ aapt p -F jfo2.apk apk/

# 打印APK包信息

$ aapt dump badging jfo.apk

# add a file

$ aapt a jfo.apk libcharset.so

# remove a file

$ aapt r jfo.apk libcharset.so

======= hierarchyviewer =======

# provides a visual representation of the layout's View hierarchy

(the Layout View)

$ hierarchyviewer

======= astyle =======

# 代码格式化工具 astyle

find ./ -name *.java -exec astyle --style=ansi {} \;

获取并编译linux源码,android获取源代码、编译、命令相关推荐

  1. 获取微信小程序源码并进行反编译

    获取微信小程序源码并进行反编译 只需如下几部就可以爬取到你所想要的微信小程序源码: 第一: node.js运行环境 如果没有安装nodejs,请先安装一下 下载地址:https://nodejs.or ...

  2. 编译linux源码报错,记录一次Linux内核源码编译实验

    记录一次Linux内核源码编译实验 文章目录 记录一次Linux内核源码编译实验 0. 实验环境 1. 选择.下载内核源码 2. 安装必要的依赖软件以及性能要求 3. 解压.配置和编译内核源码 3.1 ...

  3. java 源码分析_Java 源代码编译成 Class 文件的过程分析

    原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...

  4. 获取并编译linux源码,linux – 从源代码编译软件:如何收集依赖项列表?

    我想从源代码编译Nginx 1.9.8并将其安装在Ubuntu 14.04服务器上.但是,这适用于任何软件,如何确定我需要在本地系统上安装哪些依赖项才能构建软件? 说我想编译Nginx.我可以随时使用 ...

  5. vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...

    摘要:本文介绍了Win7 64位环境下OpenCC(Open Chinese Convert) 1.0.4源码编译全过程,除VS2017外,VS2013以上版本也应该基本同样适用,其他版本的Windo ...

  6. 编译linux源码,linux源码树编译

    写linux的网卡驱动,需要把arm版本迁移至x86版本测试,这就需要重新编译适应x86 PC的源码树.其实安装的系统已经有源码树,不需要像arm版本那样重新编译,位于/lib/modules/3.0 ...

  7. MFC WebBrowser获取网面完整源码 WebBrowser获取网面完整HTML

    反爬比较厉害的网站,用WebBrowser来获取网页源码,也可使用开源的浏览器来实现. #include <MsHTML.h> #include <atlconv.h> voi ...

  8. 反编译apk修改v7包_微信Android SDK反编译还原源码 进行修改重新编译

    一.介绍 微信sdk,做开发的都应该用过,微信分享.支付,都要用到的. 接下来,跟着我,把他的sdk源码还原为一个module可编译的形式. 用到的工具: jadx: 这是一款反编译apk和jar包的 ...

  9. linux源码安装apache2,CentOS7编译安装Apache2

    在LAMP环境下对于服务的安装是必不可少的,在linux环境下安装软件也有两种不同的方式,一种是yum安装当然了不同的linux发行版本使用略有不同,另一种是通过编译安装,编译安装要比yum安装要可控 ...

最新文章

  1. 这样系统的学习分布式,他日必成大器!
  2. 王者荣耀最难选择题2选1,刺痛cos虞姬,还是北极星露脸?我选一
  3. P1983-车站分级【图论,记忆化dfs,构图】
  4. 6种快速统计代码执行时间的方法,真香!(史上最全)
  5. 首批拟科创板IPO名单今日揭晓!
  6. 随想录(嵌入式工程师的出路)
  7. python with open as yaml_python – pyyaml并仅使用字符串引号
  8. 互联网网站采集工具大比拼和选择指南
  9. json转换map多层嵌套问题
  10. android截屏方法是黑屏,Android截屏表面视图显示黑屏
  11. Conda的PyTorch安装
  12. GMS2(Gamemaker Studio 2)运行工程时遇到的问题解决
  13. Coremail论客副总裁:从传统走向自主可控,金融行业邮件系统的转型升级
  14. android 24节气及节日,iOS -- 获取24节气和节日
  15. CSS---‘样式’基础用法 与 案例
  16. Android与Linux的区别
  17. MTK Wlan驱动功能
  18. python程序员职业规划书_读书笔记之《程序员必读的职业规划书》
  19. Android创建杀不死的Service
  20. echarts y轴四等分

热门文章

  1. Multiple classes found for path in the registry of this declarative base. Please use a fully
  2. MySQL8.0设置远程访问权限
  3. Loaded runtime CuDNN library: 7102 (compatibility version 7100) but source was compiled with 7004
  4. 多维卷积与一维卷积的统一性(运算篇)
  5. 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
  6. OpenCV Mat类详解
  7. Login failed with an access denied error.
  8. html中用来标记关键字的标识,简单的HTML标识属性与识别
  9. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
  10. php常量 变量,php语言的变量和常量