基于android build system 的APP编译

-------------------------------------------------------------------------------------
编译自己的测试APP(helloworld)
在system文件夹下建立一个helloworld文件夹,编辑一个helloworld.cpp文件
代码如下:
#include
int main(int argc, char argv[])
{
printf("hello world! --- by carey");
}
另外建立一个Android.mk 文件,内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=                                      /
helloworld.cpp
LOCAL_MODULE:= helloworld
LOCAL_STATIC_LIBRARIES := libcutils libc
include $(BUILD_EXECUTABLE)
在源码文件夹输入make helloworld
root@ubuntu810:/mnt/newdisk/android22# make helloworld
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2.1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
target thumb C++: helloworld <= system/helloworld/helloworld.cpp
system/helloworld/helloworld.cpp:3: warning: second argument of 'int main(int, char*)' should be 'char **'
Notice file: external/elfcopy/NOTICE -- out/host/linux-x86/obj/NOTICE_FILES/src//lib/libelfcopy.a.txt
target Prelink: libdl (out/target/product/generic/symbols/system/lib/libdl.so)
target Strip: libdl (out/target/product/generic/obj/lib/libdl.so)
target SharedLib: libc
(out/target/product/generic/obj/SHARED_LIBRARIES/libc_intermediates/LINKED/libc.so)
target Prelink: libc (out/target/product/generic/symbols/system/lib/libc.so)
libelfcopy: Warning: DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8
libelfcopy: Warning: Range lists in .debug_info section aren't in ascending order!
target Strip: libc (out/target/product/generic/obj/lib/libc.so)
target SharedLib: libstdc++
(out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/LINKED/libstdc++.so)
target Prelink: libstdc++ (out/target/product/generic/symbols/system/lib/libstdc++.so)
target Strip: libstdc++ (out/target/product/generic/obj/lib/libstdc++.so)
target SharedLib: libm
(out/target/product/generic/obj/SHARED_LIBRARIES/libm_intermediates/LINKED/libm.so)
target Prelink: libm (out/target/product/generic/symbols/system/lib/libm.so)
libelfcopy: Warning: Range lists in .debug_info section aren't in ascending order!
target Strip: libm (out/target/product/generic/obj/lib/libm.so)
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc -mthumb-interwork -o
out/target/product/generic/obj/lib/crtend_android.o -c bionic/libc/arch-arm/bionic/crtend.S
target Executable: helloworld
(out/target/product/generic/obj/EXECUTABLES/helloworld_intermediates/LINKED/helloworld)
target Non-prelinked: helloworld (out/target/product/generic/symbols/system/bin/helloworld)
target Strip: helloworld
(out/target/product/generic/obj/EXECUTABLES/helloworld_intermediates/helloworld)
Notice file: bionic/libc/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libc.so.txt
Notice file: bionic/libdl/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libdl.so.txt
Install: out/target/product/generic/system/lib/libdl.so
Notice file: bionic/libc/NOTICE --
out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libc_common.a.txt
Install: out/target/product/generic/system/lib/libc.so
Notice file: bionic/libstdc++/NOTICE --
out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libstdc++.so.txt
Install: out/target/product/generic/system/lib/libstdc++.so
Notice file: bionic/libm/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libm.so.txt
Install: out/target/product/generic/system/lib/libm.so
Notice file: system/core/liblog/NOTICE --
out/target/product/generic/obj/NOTICE_FILES/src//system/lib/liblog.a.txt
Notice file: system/core/libcutils/NOTICE --
out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libcutils.a.txt
Notice file: bionic/libc/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/lib/libc.a.txt
Install: out/target/product/generic/system/bin/helloworld
编译系统就会自动输出一个编译好的helloworld程序,并且放置在out/target/product/generic/system/bin/
文件夹中
文件属性:
root@ubuntu810:/mnt/newdisk/android22/out/target/product/generic/system/bin# file helloworld
helloworld: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs),
stripped
root@ubuntu810:/mnt/newdisk/android22/out/target/product/generic/system/bin# ./helloworld
bash: ./helloworld: cannot execute binary file
-------------------------------------------------------------------------------------
编译System级别的应用APP
1. 在eclipse开发环境中建立android工程项目
2. 修改AndroidManifest.xml文件,在manifest中加入android:sharedUserId="android.uid.system"
3. 建立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 := (此处为android工程名)
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
4. 将该android工程放入到android源码的packages/apps/目录下
5. 在android源码目录下执行make (android工程名)
6. 编译完成后就会将apk生成到
out/target/product/generic/system/app/(android工程名).apk
-------------------------------------------------------------------------------------
Add a new component into open source Android
The android build system is complicated. It is not easy to create a simple build script to build single
component.
But it is much easier to add a new component into the build system. Here is a sample to build the "Hello
world!"
for Android, and it is dynamic linked executable.
1. create a directory for the new component in $(YOUR_ANDROID)/external folder:
$(YOUR_ANDROID)/external/hello
2. put the hello.c into the directory: $(YOUR_ANDROID)/external/hello/
3. create Android.mk in $(YOUR_ANDROID)/external/hello/ directory, the Android.mk likes the following:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES:= /
hello.c
LOCAL_MODULE := hello
include $(BUILD_EXECUTABLE)
4. add the following line into $(BUILD_SYSTEM)/main.mk,$(BUILD_SYSTEM) is in
$(YOUR_ANDROID)/build/core:
external/hello
5. launch the build command in $(YOUR_ANDROID): make hello
you will have the build target hello in $(YOUR_ANDROID)/out/target/product/generic/system/bin.
You can use include $(BUILD_SHARED_LIBRARY) to create shared library.
Find more in $(YOUR_ANDROID)/build/core/config.mk.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值