转自:http://hghhe.blog.163.com/blog/static/32377568201236102439271/
自从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”,选择一个保存目录,
Build Target选择android2.3.1,修改Package Name为:com.test.hello(当然这个可以随便定义),去掉Create Activity选项,点击Finish创建工程完成,
在工程名上右键选择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文件
在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!了。