读书人

Android ROM研究-Android build syste

发布时间: 2012-09-21 15:47:26 作者: rapoo

Android ROM研究---Android build system增加模块

Android build system就是编译系统的意思

在我们需要向自己编译的源代码中增加模块的时候,需要一些规则,当然这个规则都是类似的。

?

Android.mk文件解析

?

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE :=HelloLOCAL_SRC_FILES := hello.cinclude $(BUILD_SHARED_LIBRARY)

?

#include <stdio.h>int main(void){printf("Hello world!\n");return 0;}

?Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES :=hello.cLOCAL_MODULE_TAGS :=optionalLOCAL_MODULE :=testinclude $(BUILD_EXECUTABLE)
?

首先退出到mydroid目录下,执行

. build/envsetup.sh或者source build/envsetup.sh

?进行环境变量的配置

然后进入到test目录下,执行“mm”(mm表示编译当前项目),如果想重新执行,可以"mm -B"

?

这样,会在out/target/product/generic/obj/EXECUTABLES/test_intermediates/LINKED/目录下生成可执行文件test

?

然后将test文件用adb push test /data/local 到data/local目录下。

?

下面开始执行,你可以在手机中用terminal emulator来执行,也可以以adb shell后,执行

./test显示:Hello world!
?

2、增加静态库(.a)

Android.mk文件

LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := \hello.cLOCAL_MODULE :=testinclude $(BUILD_STATIC_LIBRARY)

编译:

mydroid#. build/envsetup.sh

test#mm

生成的结果在out/target/product/generic/obj/STATIC_LIBRARY

目标文件夹{XXX}_static_intermediates下,XXX为你定义的模块名称test

?

假如这个静态库是由hello.c生成的,但是生成的静态库是不能直接使用的,而是由动态库调用它

?

3、增加动态库(.so)

编译动态库其实可以用NDK的,那样生成非常方便,但是有时候还是需要掌握其他的方法的

Android.mk

LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := \hello.cLOCAL_MODULE :=testinclude $(BUILD_SHARED_LIBRARY)

?编译的放法都差不多,只不过Android.mk不同的是最后一句,如果比较一下就会发现那句话决定了生成的是什么

?

不过要想生成动态库,绝非是这么简单的,有时候只需要Android.mk和源文件即可,但是有时候还需要Application.mk文件。Application.mk文件的具体语法很快会在博客中更新

?

?

#include <string.h>#include <jni.h>jstringJava_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ){ return (*env)->NewStringUTF(env, "Hello from JNI !");}?

?

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)?

?

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := native-activityLOCAL_SRC_FILES := main.cLOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CMLOCAL_STATIC_LIBRARIES := android_native_app_glue include $(BUILD_SHARED_LIBRARY) $(call import-module,android/native_app_glue)

?

APP_PLATFORM := android-10?

?


?

?

4、增加apk文件(有源代码)

?

LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE_TAGS :=optionalLOCAL_SRC_FILES :=$(call all-java-files-under, src) LOCAL_PACKAGE_NAME :=(工程名字)LOCAL_CERTIFICATE :=platforminclude $(BUILD_PACKAGE)

?

这样,在执行make clean之后,再次make,只需要make snod即可了

?

读书人网 >系统运维

热点推荐