现在的位置: 首页 > 综合 > 正文

Android NDK 用C语言创建第一个本地应用程序

2013年06月22日 ⁄ 综合 ⁄ 共 2323字 ⁄ 字号 评论关闭

http://hghhe.blog.163.com/blog/static/32377568201236102439271/

好像许久没更新博客了Android NDK 用C语言创建第一个本地应用程序 - 独轮之月 - 听雨阁,也很久没用OGRE和MYGUI了。


    自从android2.3发布后,我们就可以使用C语言来编写程序了,不再需要用JAVA来创建窗口。当然写出来的程序也只能运行在android2.3及以上的设备上,但我相信不久的将来2.3的设备会占据绝大多数(其实现在估计也超过50%了吧)。本文很简单,用C语言写一个应用程序,打印经典的"Hello
world!"。

    不得不说,首先得下载android的SDK、NDK等等(东西太多了,可参考其它同学关于android开发配置的博客)... 对于像我这样的懒人,直接装一个nvidia的Tegra
Android Development Pack
,它会自动安装并配置好android
SDK、NDK、Eclipse、ADT等。

    用Eclipse创建一个新的工程"Hello":打开Eclipse,选择File->New->Other->Android->Android Project,输入Project Name为“Hello”,选择一个保存目录,如下图:

Android NDK 用C语言创建第一个本地应用程序 - 独轮之月 - 听雨阁

 Build Target选择android2.3.1,修改Package Name为:com.test.hello(当然这个可以随便定义),去掉Create Activity选项,点击Finish创建工程完成,如下图:

Android NDK 用C语言创建第一个本地应用程序 - 独轮之月 - 听雨阁

 在工程名上右键选择New->Other->C/C++->Convert to a C/C++ Project,然后Next再Finish完成。
    打开AndroidManifest.xml文件,在application标签属性中添加android:hasCode="false"(表示程序中没有JAVA),然后在application标签中添加

      <activity android:name="android.app.NativeActivity"                           android:label="@string/app_name"                 android:configChanges="orientation|keyboardHidden">             <meta-data android:name="android.app.lib_name"                     android:value="Hello" />             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>

其中android.app.NativeActivity是系统提供的,android:value="Hello"中的Hello是jni中定义的库名(后面会介绍),android.intent.action.MAIN指定程序进入时调用此Activity。AndroidManifest.xml文件如下图:

Android NDK 用C语言创建第一个本地应用程序 - 独轮之月 - 听雨阁

    在Hello工程目录下,创建名为jni的文件夹,在jni文件夹下创建main.c和Android.mk文件。在Android.mk文件中添加以下代码:

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=Hello
LOCAL_SRC_FILES:=main.c
LOCAL_LDLIBS    := -llog -landroid
include $(BUILD_SHARED_LIBRARY)

其中LOCAL_MODULE :=Hello中的Hello与上文中的android:value="Hello"中的相对应。在main.c中添加以下代码:

#include <android/log.h>
#include <android/native_activity.h>

#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "Hello", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "Hello", __VA_ARGS__))

void ANativeActivity_onCreate(ANativeActivity* activity,void* savedState, size_t savedStateSize)
{
 LOGI("---------------------------Hello world!---------------------------");
}

其中ANativeActivity_onCreate就是入口函数了,这里仅仅输出Hello world!(虚线是为了在logcat中容易被找到)。

    然后编译(如果make编译出错,可在工程属性的C/C++ Build->Build command修改为${NDKROOT}/ndk-build)、运行(工程中右键选Run AS->Android Application),就能在Logcat中找到Hello
world!了
Android NDK 用C语言创建第一个本地应用程序 - 独轮之月 - 听雨阁

抱歉!评论已关闭.