导航:首页 > 操作系统 > androidmakesdk

androidmakesdk

发布时间:2023-02-05 17:42:05

A. android development 怎么编译

很多开发者可能下载后编译的Android SDK是Linxu下使用的,如何编译Windows下的Android SDK呢? 这里Android123总结如下:

1. 首先必须在linux下执行完源码下载,就是reop sync后,首先做一次完整编译,执行make,然后编译Linux下的SDK,执行make sdk即可,在这之前的操作,可以参考 Android源码编译相关问题汇总

2. 这时候在生成out目录下的内容考回到Windows下,如果你用虚拟机这一步只需要拖动操作即可,比较简单。

3. 下载Cygwin,Android开发网提示安装时记住选择Unix/binary而不是DOS/text国内的很多文章均写错了,不然无法正确编译,这在Android官方的howto_build_SDK.txt中写的很详细,具体为When installing Cygwin, set Default Text File Type to Unix/binary, not DOS/text. This is really important, otherwise you will get errors when trying to checkout code using git

4. 安装Cygwin需要下载的包有 autoconf, bison, curl, flex, gcc, g++, git, gnupg, make, mingw-zlib, python, zip, unzip,建议安装 diffutils, emacs, openssh, rsync, vim, wget ,不要安装readline。

5. 然后在Windows下将从Linux从预编译生成的zip一般名为android-sdk_eng.[你电脑的名称]_linux-x86.zip文件找出来,这是Linux下的SDK。

6. 按照howto_build_SDK.txt的步骤,其中最后一步为development/build/tools/make_windows_sdk.sh /path/to/macos/or/linux/sdk.zip ~/mysdk、

最后Android123提示大家,make_windows_sdk.sh是你在Linux下development/build/tools/才有的。

B. apk)system/frameworkjavax.obex.jar

framework调试

1.cd framework/base
2.在此目录下执行 mm
3.adb push out/target/proct/paz00/system/framework/framework.jar system/framework
4.重新运行模拟器,可以看到效果
修改frameworks/policies/base/phone/ 下文件
使用命令make android.policy
在虚拟机system/farmework/下的文件如下,根据修改文件的位置选择不同的make参数
monkey.jar
framework-tests.jar
am.jar
framework-res.apk
pm.jar
core.jar
input.jar
ime.jar
android.policy.jar
android.test.runner.jar
ext.jar
services.jar
javax.obex.jar
framework.jar
svc.jar
bmgr.jar
修改android system文件夹权限

具体操作:

lixinso@lixinso-desktop:~$ adb devices
List of devices attached
emulator-5554 device

lixinso@lixinso-desktop:~$ adb shell
# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
# mount -o remount /dev/block/mtdblock0 /system
# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 rw 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
#

mount完就可以任意修改删除拉~~~~

adb push out/target/proct/msm7627_ffa/system/framework/services.jar system/framework/services.jar

[转]Android 重新编译资源文件
在开发过程中,尤其是Framework相关开发时,有时候需要重新编译资源文件.编译顺序和注意事项如下:

1,资源文件位置:frameworks/base/core/res

2,编译后生成的文件:framework-res.apk 另外com.android.internal.R会更新这个R.java所在目录为/out/target/common/R/com/android /internal.

3,编译资源后,必须重新编译framework.jar.

4,如果在frameworks/base/core/res执行mm是并不重新编译,请使用toutch ### 命令

###代表目录下的一个文件.

5,资源文件要小写.

6,如果没有必要,不要编译资源文件,可以用其他方式使用资源,比如将资源使用adb push 传到某个目

录,程序中直接指定具体目录.我在编译资源过程中遇到一些奇怪的问题,比如有时候许多图标会显

示错误,原因猜测跟重新编译资源有关,可以试着重新编译services.jar并替换看看.

举一个例子:假如我想在WindowManagerService.java中使用一个图片资源pic.png.顺序如下.

1,将文件pic.png拷贝到位置:frameworks/base/core/res/res/drawable下.

2,在frameworks/base/core/res/res/drawable目录下执行touch pic.png.

3,进入目录frameworks/base/core/res/ 执行mm命令, 编译 framework-res.apk

4,执行完后com.android.internal.R 会新生成一个R.drawable.pic的引用.在程序中使用即可.

5,在目录frameworks/base/ 下执行mm 编译 framework.jar.

6,在WindowManagerService.java中使用com.android.internal.R.drawable.pic,使用完后保 存文件.

7,进入目录frameworks/base/services/java/ 执行mm 编译 services.jar

8,替换机器上(虚拟机或者真机)的jar apk文件.

adb push framework-res.apk /system/framework/

adb push services.jar /system/framework/

adb push framework.jar /system/framework/

执行命令时注意framework-res.apk 的真实路径.

9,reboot 机器,查看修改结果.大功告成!

[转]Android project 的常用编译方法
0/ 准备工作 (生成mm等命令,具体参考: ~/mydonut/build/envsetup.sh)
$ cd mydonut
$ sh . build/envsetup.sh

1/ 编译项目 (Package: out/...,镜像文件路径:~/mydonut/out/target/proct/generic)
$ make

2/ 创建SDK (Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>-x86.zip)
$ make sdk

3/ 创建ADT (Package ADT: ~/mysdk/android-eclipse-<buildnumber>.zip)
$ development/tools/eclipse/scripts/build_server.sh ~/mysdk $USER

4/ 编译模块 (访问模块对应的目录,执行mm命令,Package: ~/mydonut/out/target/proct/generic/system/{model-name}/{submodel-name}.**)
$ cd frameworks/
$ mm

该system目录对应的就是设备/模拟器运行环境对应的system目录,我 们讲新生成的模块文件(*.so/*.jar/*.apk/...)上传到运行环境下的对应目录后,重启设备生效
如果是应用程序(*.apk),除了Launcher应用需要重启,其他应用均不需要重启设备。

下面以更新framework为例,Package: ~/mydonut/out/target/proct/generic/system/framework/framework.jar

4.1 修改framwork程序(~mydonut/framework/...),并访问framework目录,执行mm命令,编译新的 framework.jar程序
$ cd framework
$ mm

其他模块,如库文件和应用程序也可以用同样的方法编译;应 用程序还可以通过eclipse创建android 应用程序安装包。

4.2 首先我们运行模拟器(如果是手机,则通过USB连上终端)
$ cd {ANDROID SDK}/tools
$ ./emulator -avd {AVD_NAME}

4.3 然后通过shell命令,设置设备/system目录的写权限
$ ./adb shell
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
# cd /system/bin
# cat sh > su
# chmod 4755 su
# exit

4.4 上传framework.jar到对应的运行环境目录
$ ./adb push {MYDONUT_OUT_PATH}/target/proct/generic/system/framework/framework.jar /system/framework

4.5 通过命令,重启设备,更新生效。
$ ./adb shell
# stop
# start

注意:如果要关掉模拟窗口后 生效,需要通过make命令,编译最后一次编译后的改动,生成新的img镜像文件,并更新到SDK,或生成新的SDK。

附1:命令注解
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles 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.

附2:参考文档
~/mydonut/development/docs/howto_SDK_git_cygwin.txt
~/mydonut/development/docs/howto_build_SDK.txt
~/mydonut/development/docs/howto_use_cupcake_sdk.txt

附3:输出目录
~/mydonut/out/target/common/obj/JAVA_LIBRARIES
.jar程序包的完整输出目录,含有SDK中标志为@hide的程序和接口, 应用程序中需要这些借口可以引入相关的.jar程序。

~/mydonut/out/host/linux-x86/bin
存放相关的工具tools目录

附4:创建完整的java项目
$ cp ./development/ide/eclipse/.classpath .
打开Eclipse,新增一个已经创建的java项目,执行mydonut目录,点击finish,完成项目的创建,可以查看项目下所有的 java程序。

网址:http://www.blogjava.net/anymobile/articles/296462.html

C. 怎么在Ubuntu编译Android2.3源代码以及制作自己的SDK

网上下一个软碟通软通(UitraISO)工具、然后去官网上下载一个64位ubuntu.*.iso系统文件、然后软碟通工具自己制作一个USB启动盘(非常简单)不会用软碟通的网络一下一大把!、系统最好是10.40以上的版本

使用的是ubuntu官网下载的ubuntu10.04 LTS 64位版本(ubuntu-10.04.2-desktop-amd64.iso)

配置软件源:

系统安装完毕以后应该首先换一个速度快的软件源

一般用的是ubunt

不然下载各种更新和软件包的时候非常的慢

安装JDK:

我要编译的是2.3姜饼的源代码 所以需要使用jdk6 (还需要是64位的系统)

如果是32为系统藐视jdk要安装jdk5.0的吧!藐视说有个doc什么的不行!所以系统一般装64的、如果是32的小伙们赶快把jdk看看

安装方法:

打开终端

输入

sudo add-apt-repository "deb "

sudo add-apt-repository "deb-src "

sudo apt-get update

sudo apt-get install sun-java6-jdk

就安装好了 (ubuntu10.04 LTS版会自带那两个源)

并且不需要配置环境变量

这一步可以参考

安装各种软件包:

终端中输入

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos texinfo libsdl-dev libwxgtk2.6-dev

最后三个是我补充的 其他都是官方文档提供的

这一步可以参考

下载源代码:

打开终端并输入

mkdir ~/bin

PATH=~/bin:$PATH

这两句是在你的个人文件夹下创建了一个名字叫bin的文件夹 并且把其加入到了环境变量中

再输入

curl ; ~/bin/repo

chmod a+x ~/bin/repo

这两句首先在bin目录下面下载了一个repo文件 repo简单来说就说用来版本控制的 我们就是用的它来同步代码

然后建立一个用来存放源代码的文件夹 我的这个文件夹的名字是android2.3

输入

mkdir android2.3

cd android2.3

进入android2.3目录

输入

repo init -u git://androi/platform/manifest.git -b gingerbread

在此说明一下:

安卓总称:“机器人”

1.5系统:“纸杯蛋糕”

Android 1.6 Donut甜甜圈
Android 2.0 Eclair松饼
Android 2.1 Eclair松饼
Android 2.2 Froyo冻酸奶
Android 2.3 Gingerbread姜饼(以上系统都是用于手机的)官方消息说2.4准备出来了!至于3.0目前只用于平板电脑

Android 4.0 Ice Cream Sandwich(简称ICS,冰淇淋三明治),

表示你需要的代码是姜饼的 所以最后是gingerbread 如果是2.2代码 就把gingerbread改成froyo

然后你需要输入你的名字跟邮箱地址

如果提示找不到repo命令的话 需要重新设置环境变量 就是之前的PATH=~/bin:$PATH

输入

repo sync

开始同步代码 这个过程会根据你的网速来决定快慢

这一步需要下载的数据有3g那么大

可以续传 一次没下完也没关系

如果之前就已经下过一次的话 只需要把源代码目录(我的是android2.3)下有一个叫.repo的隐藏文件夹里的projects文件夹备份出来就可以了

以后还需要同步的时候再把projects文件夹拷贝回去

ctrl+h查看隐藏文件

这一步可以参考

编译整个源代码:

cd android2.3

进入你的代码目录

输入

. build/envsetup.sh

注意.和build中间有个空格

输入

lunch full-eng

make -j2

输入make就是开始编译代码了 加一个-j2参数就是开两个线程去编译 速度会快些 我花了两个小时的时间

编译完毕以后马上输入

emulator

就可以运行模拟器了 系统能跑起来就说明编译成功了

如果提示找不到emulator命令的话

需要添加环境变量

在android2.3目录下的out/target/proct/generic文件夹下会看到system.img

能看到的话应该算是成功了

这一步可以参考

编译SDK:

这一步在官方网站上没有说明

但是在源代码文件夹里面有文档提到了

就是在android2.3/sdk/docs目录下有一个叫howto_build_SDK.txt的文件介绍了如何编译SDK

原文

Then once you have all the source, simply build the SDK using: $ cd ~/my-android-git $ . build/envsetup.sh $ lunch sdk-eng $ make sdk

看来不需要先编译整个系统再编译SDK 可以直接上来就编译SDK

按提示输入

make到时候也可以加上-j参数 比如 make -j2 sdk

但是不推荐 因为容易编译失败 而且编译SDK只需要二十多分钟到时间 不算很长

当出现

Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip

的时候 就表示编译成功了 其中<build-id>默认是系统的用户名

howto_build_SDK.txt中还提到了编译ADT插件

我发现自己编译到ADT插件竟然认不到platform 自己编译出来到SDK也一样

原因不明

只要使用官方的SDK和ADT就没有问题了

具体就是把自己编译出来platform拷贝到官方SDK里到platforms文件夹下 搞过Android开发都懂的

最后:

非常简单的一步

就是直接修改源代码然后编译SDK就可以得到自己的SDK了

我就示范一个简单的例子 抛砖引玉

首先我找到TextView的代码

在frameworks/base/core/java/android/widget 如图

我在updateTextColors方法的开头添加了一句System.out.println

打印了一句话"Source Code Changed"

updateTextColors方法会在TextView的setTextColor方法中被调用

好 保存

编译

然后使用这个platform

新建一个项目

调用一下TextView的setTextColor方法看看有什么效果

一个很简单的例子

看看

Source Code Changed被打出来了

SDK修改成功

D. 怎样在 android.jar 中增加自己实现的接口

Android项目常常需要引用自定义的或者外部的jar包,这里提供一些经验,供参考。

一. 一般做法:

1. 通常情况下,直接将jar包在Eclipse工程中的libs目录下,就可以了,Eclipse就会自动引用过来,代码中有红叉的地方也就会消失了。

2. 查看build path中order and export中的private Libaries和Dependencies是否勾选,正确的做法是勾选。

再clean整个工程,再运行可否。

3. 你的jar文件必须也是由Android工程创建的,否则,会发生“"java.lang.NoClassDefFoundError“等错误,下面是一个错误:

12-09 00:43:05.172: E/dalvikvm(4456): Could not find class 'com.example.test4androidjar2.Jar4Android', referenced from method com.example.filemanagertest4android.MainActivity$1.onClick
4. 你的jar包必须是在Android下面编辑和编译,打包,不能在java中进行打包。FileMnager就是一例。

二.可能引起的异常:

1. Could not find class ......
2. VFY: unable to resolve new-instance 643 .....
3. Could not find class 'com.example.test4androidjar2.Jar4Android'
4. java.lang.NoClassDefFoundError...

E. 自己可以编译安卓源码吗

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    F. 安卓怎么使用修改过的源码编译程序

    1、Android的文件系统结构是怎样的,我们安装的程序放在那里?
    编译Android源码之后,在out/target/proct/generic一些文件:
    ramdisk.img、system.img、userdata.img、 system、 data、root
    其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。

    ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。

    2、Android SDK和android源码能为我们提供什么工具?
    AndroidSDK提供有很多工具,如adb,ddms,emulator,aapt等,并提供kernel-qemu、ramdisk.img、system.img、userdata.img。因此,只要有android SDK,我们就可以在模拟器上把android跑起来。
    Android源码可以编译出android SDK、adb等工具、android文件系统,以及ADT插件,也就是说,我们可以从android源码编译出所有android相关的东西。

    3、 把Android源 码”make”之后会生成许多工具和android文件系统(system.img等),我们又可以使用“makesdk”来生成android SDK,android
    SDK也包括有工具和android文件系统(system.img等),而原来安装的时候我们也安装了androidSDK,那么我们在开发时应该使用那些工具和android文件系统呢?

    G. 使用cmake/make打包Android 动态库

    打包需要使用cmake是AndroidSdk目录下的
    ${ANDROID_HOME}/cmake/3.6.4111459/bin/cmake

    参数:
    -H

    -B

    -DANDROID_NDK

    -DCMAKE_LIBRARY_OUTPUT_DIRECTORY

    -DCMAKE_MAKE_PROGRAM

    -DCMAKE_TOOLCHAIN_FILE

    -DANDROID_ABI

    -DCMAKE_BUILD_TYPE

    -DANDROID_NATIVE_API_LEVEL 最低支持的Api版本
    -DANDROID_TOOLCHAIN

    -DCMAKE_GENERATOR

    打包所有abi的脚本例子:

    H. 编译android 源码需要sdk环境吗

    下面是android学习手册,可以查看编译源码,360手机助手中下载,

    编译环境: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脚本并使其可执行:

    $ curlhttp://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

    这一过程很久。

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

    编译好android之后,emulator在~/android/out/host/linux-x86/bin下,ramdisk.img,system.img和userdata.img则在~/android/out/target/proct/generic下。

    $ cd ~/android/out/host/linux-x86/bin

    增加环境变量

    $ emacs ~/.bashrc

    在.bashrc中新增环境变量,如下

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

    export ANDROID_PRODUCT_OUT=~/android/out/target/proct/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/proct/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 moles in the current directory.
    - mmm: Builds all of the moles 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/proct/generic/data/app/ContactsTests.apk
    out/target/proct/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换成真实的路径;

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

    目前的android工具有:

    A、我们从网上下载的Android 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只是做了而已。

    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

    I. 如何编译android sdk

    如果没有真正开发板,又想深入到android
    framework里,或kernel里的话,就只能用android
    的emulator了。
    但是我们下载的android
    SDK没有源代码,我们没办法跟踪修改framework和kernel里的东西。
    所以有了想尝试自己从头生成SDK的想法。
    1.
    首先下载编译android所有source
    code.
    具体步骤这里不再赘述,参考ht
    tp:/
    /source.and
    roid.c
    om/download
    cd
    mydroid
    repo
    init
    -u
    git://android.git.kernel.org/platform/manifest.git
    repo
    sync
    一点小提示:
    有时候google的android服务器老是断,总不能让我们守在电脑旁边一直手工重新repo
    sync吧,这可是需要N个小时才能下载完的啊。
    我们就写个小脚本让电脑自动repo
    sync,直到下载成功为止:
    #!/bin/sh
    count=0
    ret=1
    while
    [
    $ret
    -ne
    0
    ]
    do
    repo
    sync
    ret=$?
    count=$((
    $count
    +
    1))
    echo
    "try
    $count,
    ret:
    $ret"
    done
    echo
    "try
    $count,
    ret:
    $ret"
    把上面的内容复制到一个文件里tryrepo.sh
    然后修改tryrepo.sh的属性,开始自动工作吧。第二点早上应该就大功告成了
    chmod
    a+x
    tryrepo.sh
    ./tryrepo.sh
    2.
    编译android,
    生成SDK
    make
    sdk
    漫长的等待之后,SDK生成了,在目录:mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\platforms\
    在linux下面可以直接运行mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\tools\android
    就可以看到熟悉的android
    emulator启动界面。
    如果想在windows
    XP下使用这个SDK和emulator,
    最简单的方法是:
    (1)自己下载一个最新的windows版本的android
    2.0
    SDK。
    (2)把mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\platforms\下的东西复制到windows版SDK的platforms下。
    (3)
    然后把platforms下android-2.0下tools目录下的几个.exe文件复制到自己编译的SDK目录下的tools目录下。

    阅读全文

    与androidmakesdk相关的资料

    热点内容
    云服务器迁移后 浏览:260
    excel格式转换pdf 浏览:987
    登录器一般存在哪个文件夹 浏览:535
    中兴光猫机器码算法 浏览:330
    android响应时间测试 浏览:940
    java编程思想第四版答案 浏览:888
    如何对nbt编程 浏览:885
    mscpdf 浏览:948
    文件夹d盘突然0字节可用 浏览:272
    吃火腿肠的解压场面 浏览:339
    卫星锅加密教程 浏览:792
    php7的特性是什么 浏览:469
    编译类高级语言源代码运行过程 浏览:177
    科普中国app怎么分享 浏览:87
    51单片机与32单片机比较 浏览:422
    SQL加密存储解密 浏览:507
    电气工程师把程序加密 浏览:797
    解压切东西动画版 浏览:965
    点到椭圆的距离算法 浏览:388
    新的编译系统 浏览:533