Android之NDK开发之HelloWorld

之前假设开发环境已配置好。

代码编写:

1> java代码

建立一个android应用工程MyJni,创建MyJni.java

package com.test.jni;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MyJni extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText(stringFromJNI());
        
        setContentView(tv);
    }
    
    public native String stringFromJNI();

    static{
    	System.loadLibrary("hello");
    }
}
用eclipse编译该工程,生成相应的.class文件,这步必须在下一步之前完成,因为生成.h文件需要用到相应的.class文件[一般编写代码后已经生成]。

2>编写相应的C/C++代码

  刚开始学的时候,有个问题会让人很困惑,相应的C/C++代码如何编写,函数名如何定义? 这里讲一个方法,利用javah这个工具生成相应的.h文件,然后根据这个.h文件编写相应的C/C++代码。

  a. 生成相应.h文件:

  就拿我这的环境来说,首先在终端下进入刚刚建立的MyJni工程的目录:

hgy@ubuntu:~/workspace/MyJni$ 
首先我们在工程目录下建立一个jni文件夹:

mkdir jni

下面就可以生成相应的.h文件了:

javah -classpath bin -d jni classes.com.test.jni.MyJni

之后就生成头文件:

com_test_jni_MyJni.h

其内容:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

#ifndef __com_test_jni_MyJni__
#define __com_test_jni_MyJni__

#ifdef __cplusplus
extern "C"
{
#endif

JNIEXPORT jstring JNICALL Java_com_test_jni_MyJni_stringFromJNI (JNIEnv *env, jobject);

#ifdef __cplusplus
}
#endif

#endif /* __com_test_jni_MyJni__ */


MyJni.java中 stringFromJNI() 方法对应于 C/C++中的 Java_com_test_jni_MyJni_stringFromJNI() 方法.

b. 编写相应的.c文件:

  hello-jni.c :

#include<string.h>
#include<jni.h>

jstring Java_com_test_jni_MyJni_stringFromJNI (JNIEnv *env, jobject o)
{
 return (*env)->NewStringUTF(env,"Hello World!");
}

这里实现了Java_com_test_jni_MyJni_stringFromJNI方法,返回Hello,world.

3>编译hello-jni.c 生成相应的库

a 编写Android.mk文件

  在jni目录下(即hello-jni.c 同级目录下)新建一个Android.mk文件,Android.mk 文件是Android 的 makefile文件,内容如下:

LOCAL_PATH := $(call my-dir)



include $(CLEAR_VARS)



LOCAL_MODULE    := hello

LOCAL_SRC_FILES := hello-jni.c



include $(BUILD_SHARED_LIBRARY)

b. 生成.so共享库文件

  Android.mk文件已经编写好了,现在可以用android NDK开发包中的 ndk-build脚本生成对应的.so共享库了,方法如下:

hgy@ubuntu:~/workspace/MyJni/jni$ ndk-build

可以看到已经正确的生成了libhello.so共享库了, 我们去 libs/armeabi/ 目录下可以看到。

4)在eclipse重新编译MyJni工程,生成apk

  eclipse中刷新下MyJni工程,重新编译生成apk,libhello.so共享库会一起打包在apk文件内。在模拟器中看看运行结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值