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编译我们自己的应用程序
1 如何在终端中编译一个应用程序
要想用mm编译自己的应用程序,需要有自己的android的源代码, 可以到下面的链接下载:
http://android.git.kernel.org/
查看如何下载,具体的这里不讲。
假如我们的源代码下到, /works/mydroid, 具体的就是通过下面的命令(有些地方需要修改)
cd /works/
mkdir 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下, 感觉很不爽, 比如,我们建立的文件可能是在eclipse的workspace目录下,比如, ~/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
这里需要注意的是,如果你有好几个编译好的android的platform(就是不同版本的android源码工程).那么, 上面的命令必须修改。比如, 我自己自己还有一个froyo, 那么我就需要修改, 否则的话,即使我进入/works/froyo/packages/apps/Settings, 然后mm,那么实际编译的仍然是用/works/mydroid下的platfrom.
. /works/froyo/build/envsetup.sh
export TOP=/works/froyo
- android编译新
- android编译新的product
- android的framework.jar反编译,并重新编译
- 依赖新的库之后android studio编译报错
- 编译新内核
- mingw新库编译
- linux编译新内核
- ubuntu1404 编译新内核
- Android系统开发小知识-在android产品开发中添加新的编译模块
- 配置新的product(译)——android编译系统
- Android新编译的内核驱动模块不能被init加载原因解决
- 将新的驱动源文件添加进android内核进行编译
- PHP编译加载新模块
- 新环境配置编译chromium
- sbull在新内核编译
- opencv 新环境编译步骤
- Ubuntu下编译新内核
- Qwt 编译,建新工程
- ACE:ACE_SOCK_STREAM应用实例
- 给米老师的一封信
- android编译
- C++总结
- 哈夫曼树
- android编译新
- Haskell 学习笔记
- 扑克牌中学到
- android离线地图源码
- Android Framework中的PolicyManager简介
- ldconfig
- 让电脑开口说话-内容包括任何英文单词和短语
- 3->oracle 后台进程详解
- Objective-C预处理程序