android ndk开发-环境搭建(1)

2011-5-11 11:34|发布者: annmax|查看: 3356|评论: 0

摘要: 开发环境:ubuntu 11.04 + Android NDK r5b + eclipse +ADT0.9.9android sdk 过程比较简单,这里就不介绍了。1、下载android-ndk r5b$wget http://dl.google.com/android/ndk/android-ndk-r5b-linux-x86.tar.bz22、 ... 开发环境:ubuntu 11.04 + Android NDK r5b + eclipse +ADT0.9.9
android sdk 过程比较简单,这里就不介绍了。
1、下载 android-ndk r5b
$wget http://dl.google.com/android/ndk/Android-ndk-r5b-linux-x86.tar.bz2
2、将下载的ndk解压到某个目录:
$tar -xvf android-ndk-r5b-linux-x86.tar.bz2
3、修改当前用户的.profile,添加PATH
NDK=/home/lql/android-ndk-r5b
export NDK
PATH=$NDK:$PATH
export PATH
然后注销当前用户,重新登录,echo $PATH,看看PATH中有没有包含NDK
4、编写一个简单的例子
在eclipse里面新建一个hello android项目:
Java代码
public class Hello extends Activity {
public native String hello();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String hello = hello();
final TextView view = (TextView)findViewById(R.id.view);
view.setText(hello);
}
static{
System.loadLibrary("hello");
}
}
public class Hello extends Activity {
public native String hello();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String hello = hello();
final TextView view = (TextView)findViewById(R.id.view);
view.setText(hello);
}
static{
System.loadLibrary("hello");
}
}
5、到项目的bin目录下:
执行: javah -jni com.lql.Hello
会在该目录下生成一个.h文件:
com_lql_Hello.h 内容如下:
C代码
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_lql_Hello */
#ifndef _Included_com_lql_Hello
#define _Included_com_lql_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lql_Hello
* Method: hello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_lql_Hello_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_lql_Hello */
#ifndef _Included_com_lql_Hello
#define _Included_com_lql_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lql_Hello
* Method: hello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_lql_Hello_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
6、在该目录下编写一个com_lql_Hello.c文件,内容如下:
C代码
#include
#include
JNIEXPORT jstring JNICALL Java_com_lql_Hello_hello
(JNIEnv *env, jobject thiz)
{
return (*env)->NewStringUTF(env,"Hello JNI");
}
#include
#include
JNIEXPORT jstring JNICALL Java_com_lql_Hello_hello
(JNIEnv *env, jobject thiz)
{
return (*env)->NewStringUTF(env,"Hello JNI");
}
7、将com_lql_Hello.c拷贝到jni目录,同时在该目录下新建Android,mk文件,内容如下:
C代码
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := com_lql_Hello.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := com_lql_Hello.c
include $(BUILD_SHARED_LIBRARY)
8、在终端下编译该项目:
$cd hello/jni
$ndk-build
结果如下:
lql@lql-laptop:~/workspace/hello/jni$ ndk-build
Compile thumb : hello <= com_lql_Hello.c
SharedLibrary : libhello.so
Install : libhello.so => libs/armeabi/libhello.so
9、编译之后,会在hello下面生成libs目录,该目录下包armeabi/libhello.so
在eclipse中刷新项目,然后在模拟器中运行:
会在activity中显示如下内容:
Hello JNI
到此,第一个ndk项目完成!

更多相关文章

  1. 【Android】简单图片浏览器
  2. Cocos2d-x编译Android环境
  3. Android定制出厂默认输入法
  4. Android(安卓)Studio导入项目时出现,弹框说SDK有问题
  5. Android(安卓)Studio Start Failed解决方法
  6. WARNING: APP_PLATFORM android-14 is larger than android:minS
  7. 用Android代码实现自动打开USB调试
  8. 如何将一个acitvity同时设置多个theme
  9. Android的文本编解码工具类

随机推荐

  1. Matrix源码分析之第一篇
  2. NDK构建osgEarth到Android上——成功案例
  3. Android(安卓)API Demos学习(4) - Receiv
  4. Android打电话过程
  5. cocos2d怎么设置屏幕朝向?横屏 or 竖屏设
  6. Android系统java层次service实现
  7. Android音频系统学习笔记
  8. 判断是否获取了悬浮窗权限
  9. Android中抛出android.app.Fragment$Inst
  10. (4.1.1)Android(安卓)ActionBar完全解析,使