使用NDK创建及配置C++程序(原生纯C++项目,不包含JAVA代码)
写在前面,这篇文章是在上一篇博客:《Eclipse下搭建Android开发环境(使用NDK开发C/C++程序,无需安装Cygwin)》的基础上进行撰写的,如本篇文章有不明的地方,请去观摩一下我的上一篇文字。链接:http://www.cnblogs.com/xiaomiao/archive/2012/02/20/2360308.html
————————————————————分割线——————————————————————
1. 首先,搭建好Android试验平台(参考文档:《Eclipse下搭建Android开发环境(使用NDK开发C/C++程序,无需安装Cygwin)》)
2. 如图一所描述,首先创建一个Android项目(参考文档:Android.NDK.Beginner's.Guide,作者:Sylvain Ratabouil,我再发个链接吧,http://ishare.iask.sina.com.cn/f/23061508.html?retcode=0,这个是新浪爱问的一个资源,需要两个积分下载,没有积分的就去多搜一搜,不会太难弄)
注: 1. 项目名称及包名可自行命名,值得注意的是在接下来的AndroidManifest.xml 中将相应的名称改为对应的。
2. 不要勾选Create Activity.
3. 关于Android平台版本和Min SDK Version,只要对应就好。
(图一)
3. 修改AndroidMainfest.xml文件的内容为一下内容。唯一需要注意的就是<meta-data android:name="android.app.lib_name" android:value="droidblaster"/>标签中,value的值要和Android.mk 中的LOCAL_MODULE名称一致。
AndroidMainfest.xml的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.packtpub.droidblaster"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name="android.app.NativeActivity"
android:label="@string/app_name">
<meta-data android:name="android.app.lib_name"
android:value="droidblaster"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
4. 使用Eclipse将生成的项目转换为C++项目,如图二所示:
(图二)
5. 新建并配置一个Builder,使项目能够自动编译C/C++代码。(参考文档:上一篇博客中的5.5小节,创建过程在该文档中已有详细说明)
6. 在项目上点击右键,Properties-> C/C++ General-> Path and Symbols,找到Includes那一栏,
添加三个环境变量,如图三所示。
(图三)
注:此处三个变量分别指向:
${env_var:ANDROID_NDK}/platforms/android-9/arch-arm/usr/include;
${env_var:ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.4.3/include;
${env_var:ANDROID_NDK}/sources/android/native_app_glue;
ANDROID_NDK为系统环境变量,代表NDK的安装目录。
7. 在项目的目录下面建立文件夹jni,在jni中建立文件Android.mk,Android.mk的内容为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := droidblaster
LOCAL_SRC_FILES := Main.cpp EventLoop.cpp Log.cpp
LOCAL_LDLIBS := -landroid -llog
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
注:标注为红色字体的语句需要根据具体项目情况来具体填写。
8. 把预先准备好的.cpp及.hpp文档放入到jni文件中。(参考文档:Android.NDK.Beginner's.Guide 的150 – 153页,由于篇幅有限,我就不贴那些代码了)
9. 编译运行,ok!
————————————————————————分割线———————————————————————
写在后面,这篇文字写得并不是非常的详细,至少没有上一篇详细。但是我觉得我已经把重要的需要注意的情况已经列举了出来,应该是足够了。
有人也许会觉得我的这个排版有一些问题,因为我一般都是在word上面写好文档(毕竟这个才是重要的),然后才会将其复制出来,粘贴在这里,略作修改之后发表出来。
最后,依旧是那句话,欢迎交流,欢迎转载,要热爱讨论,接受批评,ok!