/*
* blackboy psyc209@163.com
* QQ群: 135202158
* 转载请注明作者及出处
*/
注意:
1。 系列六里也有一些编译相关的技巧
2。 编译过程中,如果出现需要类似缺少libxxx.so这样的出错信息,请到源码主目录编译此库: make libxxx
#######################################
编译自己的Native Code
#######################################
# 在有android源码的条件下,编译自己的native代码
1. 写好自己的c/c++工程代码,放在mymodule目录,并设置好同目录下的Android.mk
比如要编译一个动态库,代码为ZPService.h和ZPService.cpp,则这样配置:
----------------------------------------------
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=ZPService.cpp // 源代码
LOCAL_SHARED_LIBRARIES:=libutils libbinder // 依赖库
LOCAL_MODULE_TAGS:=optional // 不要忘了这行
LOCAL_MODULE:=ZPService // 生成库名,前面不需要加lib
LOCAL_PRELINK_MODULE:=false
// 编译成库, 若编译成可执行文件,则为
// include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)
---------------------------------------------
2. 把源代码目录mymodule放在android/development/下
3. (1)进入android根目录,运行
source build/envsetup.sh
(2)或者,先运行source build/envsetup.sh,再进入mymodule目录,运行
mm
4. make libZPService
5. 生成的文件将放在android/out/target/product/generic/system下的bin
或lib目录,这要视你要编成库还是可执行文件而定
# 使用下载的ndk编译自己的native代码
1. 建立工程目录ndktest, 再建立子目录jni, 在jni下放置native代码和Android.mk, 如下所示:
../ndktest
`-- jni
|-- Android.mk
`-- test.cpp
2. 进入工程主目录下, 调用ndk-build编译
zp@zp-desktop:~/ndktest$ ~/android-ndk-r7/ndk-build
Compile++ thumb : zptest <= test.cpp
StaticLibrary : libstdc++.a
Executable : zptest
Install : zptest => libs/armeabi/zptest
3. 如2所示, 生成的zptest位于ndktest/libs/armeabi目录. 编译后的目录结构如下:
../ndktest
|-- jni
| |-- Android.mk
| `-- test.cpp
|-- libs
| `-- armeabi
| `-- zptest
`-- obj
`-- local
`-- armeabi
|-- libstdc++.a
|-- objs
| `-- zptest
| |-- test.o
| `-- test.o.d
`-- zptest