赞
踩
在Android开发中,开发层次我认为大体上分为三个层次:
1.应用层:应用层主要通过eclipse以及android studio编写上层业务以及UI等,主要依赖于系统提供的接口。
2.framework层:此层次主要为应用层apk提供接口实现相应的功能。Framwork提供的功能可谓非常多。在Android中,大量应用了Binder进程通信,完成了各种丰富的操作。如果需要定制化系统动作,通常修改framework代码。
3.linux内核层:android是基于linux内核的。linux完成硬件底层初始化,加载驱动,初始化文件系统等操作。初始化jvm运行环境基础等。
当然,可以通过更深层次的划分充分认识Android系统。在android NDK开发中,很常使用到动态库。在这里主要介绍如何通过Android.mk编译生成自己定制化的动态库以及可执行文件。
Android.mk有其自定义的语法,相比于Makefile还是简单很多的。实际上,Android.mk是用来向构建系统描述你的资源文件的。详情可参考:http://android.mk/
下面来看一个简单的Android.mk的例子:
- LOCAL_PATH := $(call my-dir)
- #Android.mk通常需要定义好LOCAL_PATH,表示当前工作路径
- #函数my-dir是编译系统提供的,返回当前路径
-
- include $(CLEAR_VARS)
- #这一步操作主要是清空之前定义的LOCAL_XXX开头的变量,是必须要的操作
-
- LOCAL_C_INCLUDES:=$(LOCAL_PATH)/include
- #定义源文件所需的头文件所需的目录
-
- LOCAL_MODULE :=libhello-android
- #定义编译出来的模块名
-
- LOCAL_SHARED_LIBRARIES := liblog
- #编译此模块需要依赖的动态库
-
- LOCAL_SRC_FILES := src/hello-android.c
- #定义编译模块所需的源文件
-
- include $(BUILD_SHARED_LIBRARY)
- #定义编译出来的目标文件,如动态库,静态库,jar包以及apk
-
- #编译可执行文件,步骤和上述一样
- include $(CLEAR_VARS)
- LOCAL_C_INCLUDES:=$(LOCAL_PATH)/include
- LOCAL_SHARED_LIBRARIES := liblog \
- libhello-android
-
- LOCAL_SRC_FILES := src/main.c
- LOCAL_MODULE := main
- include $(BUILD_EXECUTABLE)
目录结构如下:
include/hello_android.h文件内容如下:
- #include<utils/Log.h>
-
- #define LOG_TAG "hello_android"
-
- void print_hello();
hello-android.c文件内容如下:
- #include "hello_android.h"
-
- void print_hello()
- {
- ALOGD("hello_android");
- }
main.c文件内容如下:
- #include "hello_android.h"
-
- int main(void)
- {
- print_hello();
- return 0;
- }
编译输出可得到如下libhello-android.so以及main可执行文件了。
Android.mk作为android完整的编译系统的配置文件,当然还有其他选项。此文章不一一举出。由于水平有限,若有错误,恳请各位读者指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。