android编译新

来源:互联网 发布:淘宝降权 编辑:程序博客网 时间:2024/04/28 13:04
 

在Android Source Code中有envsetup.sh檔案,當執行過此檔案後,可以大幅將build的過程簡單化、自動化

此檔案在src(android source code 位置)/build/中

所以可以執行以下指令
cd /src/build/

. envsetup.sh

可以使用help來檢示有哪些指令可以使用

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 modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.
- cgrep:   Greps on all local C/C++ files.
- hgrep:   Greps on all local C/C++ header files.
- jgrep:   Greps on all local Java files.
- mkgrep:  Greps on all local make files.
- rcgrep:  Greps on all local .rc files.
- resgrep: Greps on all local res/*.xml files.
- shgrep:  Greps on all local .sh files.
- godir:   Go to the directory containing a file.

其中對模組的編譯有輔助說明的是tapas、m、mm、mmm這幾個指令

其中mmm后面要跟模組的根目錄,不是所有的目錄下都有子模組,那些含有Android.mk檔案目錄才是模組的根目錄,模組名可以從Android.mk的LOCAL_MODULE或者LOCAL_PACKAGE_NAME變數中得到。

單獨編譯某模組,需要在mmm后面指定模組路徑,例如編譯external 中的jpeg

root@ubuntu:/home/android/src# mmm external/jpeg/
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
make: Entering directory `/home/android/src'
Target buildinfo: out/target/product/generic/root/default.prop
Target buildinfo: out/target/product/generic/system/build.prop
Copy: out/target/product/generic/system/etc/apns-conf.xml
make: Leaving directory `/home/android/src'
root@ubuntu:/home/android/src#


或者可用 mm 再欲編譯的模組目錄下執行
root@ubuntu:/home/android/src/external/jpeg# mm
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
make: Entering directory `/home/android/src'
Copy: out/target/product/generic/system/etc/apns-conf.xml
make: Leaving directory `/home/android/src'
root@ubuntu:/home/android/src/external/jpeg#


或者可用 m 編譯全部的模組
root@ubuntu:/home/android/src# m

你也可以在src目錄下直接執行make module name:

打開看 ./external/jpeg/Android.mk

看到裡面模組名稱為 libjpeg

LOCAL_MODULE:= libjpeg

這樣你就可以直接打模組名稱編譯

cd ~/android/src
make libjpeg

也可以在登入時自動執行此 script,編輯 ~/.bashrc 或其他 shell 的 rc 檔,加入此 script 即可

# invoke android envsetup.sh
source ~/android/build/envsetup.sh

 

如何利用mm编译我们自己的应用程序


本文基于ubuntu10.04测试通过

1 如何在终端中编译一个应用程序


要想用mm编译自己的应用程序,需要有自己的android的源代码, 可以到下面的链接下载:

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

查看如何下载,具体的这里不讲。

假如我们的源代码下到, /works/mydroid, 具体的就是通过下面的命令(有些地方需要修改)

cd /works/

mkdir mydroid

  cd mydroid

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

chmod a+x ./tools/repo

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

./tools/repo sync

./tools/repo start xxxx –all //xxx可能是eclair, froyo ...

make…

首先

exprot myandroid=/works/mydroid

cd $myandroid

build/envsetup.sh


仿照
./development/samples/HelloActivity

建立一个packages/apps/HelloWorld

或者直接在eclipse中建立一个android project.

然后修改Android.mk如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)


LOCAL_MODULE_TAGS := optional


LOCAL_SRC_FILES := $(call all-java-files-under, src)


LOCAL_PACKAGE_NAME := HelloWorld


LOCAL_CERTIFICATE := platform


include $(BUILD_PACKAGE)


# Use the folloing include to make our test apk.

include $(call all-makefiles-under,$(LOCAL_PATH))


这样,

cd packages/apps/HelloWorld

mm


生成的文件在


out/target/product/generic/system/app/HelloWorld.apk


切换到生成的apk目录下,安装

cd $myandroid/out/target/product/generic/system

adb install -r HelloWorld.apk


2 任意的目录下编译app


如果把应用程序放到packages/apps下, 感觉很不爽, 比如,我们建立的文件可能是在eclipseworkspace目录下,比如, ~/workspace


那么运行下面的命令,或者写道.bashrc

. $myandroid/build/envsetup.sh

export TOP=$myandroid

将前面建立的HelloWorld拷贝到~/workspace下,然后进入~/workspace/HelloWorld目录下,

运行

mm

是不是OK了,

生成的文件在


/works/mydroid/out/target/product/generic/system/app/HelloWorld.apk


这里需要注意的是,如果你有好几个编译好的androidplatform(就是不同版本的android源码工程).那么, 上面的命令必须修改。比如, 我自己自己还有一个froyo, 那么我就需要修改, 否则的话,即使我进入/works/froyo/packages/apps/Settings, 然后mm,那么实际编译的仍然是用/works/mydroid下的platfrom.

. /works/froyo/build/envsetup.sh

export TOP=/works/froyo