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即可了
?