NDK/JNI02-實例開發流程

1、下載與配置
一、下載
提供以下Linux版下載地址:
下載好之後,解壓到任意目錄下
unzip android-ndk-r4-linux-x86.zip
 
二、簡單配置
配置NDKROOT及PATH環境變量
方法1)
export NDKROOT=/usr/local/android-sdk-linux_86/android-ndk-r4
export PATH=$PATH:$NDKROOT
 
方法2)
vim ~/.profile
#配置NDK環境變量
export NDKROOT=/usr/local/android-sdk-linux_86/android-ndk-r4
export PATH=$PATH:$NDKROOT
保存關閉後執行以下方法使之生效
source ~/.profile
 
方法3)
vim /etc/profile
以下同2)
 
2、簡單實例配置過程
一、建立工程目錄
mkdir -p $NDKROOT/apps/HelloNDK/project
說明:
1)$NDKROOT/apps/HelloNDK --是NDK的工程目錄
2)$NDKROOT/apps/HelloNDK/project --是Android的工程目錄
 
二、在Eclipse中建立Android工程
工程Location爲:
$NDKROOT/apps/HelloNDK/project
 
三、建立native方法所在的class
package com.myq.android.HelloNDK;
public class Jni {
 public native int getCInt(int x , int y) ;
 public native String getCString(String name) ;
}
 
四、建立com_myq_android_HelloNDK_Jni.h文件
1)從新編譯Jni.java文件
拷貝Jni.java到$NDKROOT/HelloNDK/project/bin
#進入NDK根
cd $NDKROOT
 
#進入bin目錄
cd apps/HelloNDK/project/bin/
 
#拷貝 Jni.java文件
cp apps/HelloNDK/project/src/com/myq/android/HelloNDK/Jni.java cd ./
 
#編譯
javac Jni.java
 
2)建立Jni.h文件
移動apps/HelloNDK/project/bin/下的Jni.class文件
cd $NDKROOT
cd apps/HelloNDK/project/bin/
mv Jni.class com/myq/android/HelloNDK/
 
生成Jni.h文件,在bin文件夾位置下執行
javah -jni com.myq.android.HelloNDK.Jni
注:
此時在bin下生成以下文件:com_myq_android_HelloNDK_Jni.h
 
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_myq_android_HelloNDK_Jni */
#ifndef _Included_com_myq_android_HelloNDK_Jni
#define _Included_com_myq_android_HelloNDK_Jni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_myq_android_HelloNDK_Jni
 * Method:    getCInt
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt
  (JNIEnv *, jobject, jint, jint);
/*
 * Class:     com_myq_android_HelloNDK_Jni
 * Method:    getCString
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString
  (JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
 
 
五、在android工程根目錄下建立jni文件夾,移動剛纔的.h文件至此目錄下
mkdir $NDKROOT/apps/HelloNDK/project/jni
注:該jni文件夾主要存放c\c++方面的頭文件和源文件及Android.mk文件
 
移動剛纔的.h文件至jni目錄下
mv com_myq_android_HelloNDK_Jni.h ../jni/
 
六、在jni下建立com_myq_android_HelloNDK_Jni.c文件
 
#include<stdio.h>
#include<stdlib.h>
#include"com_myq_android_HelloNDK_Jni.h"
JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt(JNIEnv *env , jobject thiz , jint x , jint y)
{
  return x+y ;
}
JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString(JNIEnv *env , jobject thiz , jstring name)
{
  const jchar *str = (*env)->GetStringChars(env,name,JNI_FALSE);
  jsize len = (*env)->GetStringLength(env,name) ;
  (*env)->NewString(env,str,len) ;
  //(*env)->ReleaseStringChars(env,name,str) ;
}
 
七、在jni下建立Android.mk文件
 
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := HelloNDK
LOCAL_SRC_FILES := com_myq_android_HelloNDK_Jni.c
include $(BUILD_SHARED_LIBRARY)
 
注:相關參數說明自行查詢
 
八、在HelloNDK的工程目錄[$NDKROOT/apps/HelloNDK]下建立Application.xml文件
 
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := HelloNDK
注:
該文件時必須的,不然make沒法編譯
 
九、在$NDKROOT下編譯生成.so文件
make APP=HelloNDK
編譯成功後:
在apps/HelloNDK/project/libs/armeabi下生成libHelloNDK.so
 
注:
從新編譯 make -B APP=HelloNDK
 
十、建立java文件,調用native方法
package com.myq.android.HelloNDK;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class HelloNDK extends Activity {
 public static final String TAG = "------HelloNDK-------" ;
 private Jni mJni ;
 
 static
 {
  System.loadLibrary("HelloNDK") ;
 }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mJni = new Jni() ;
       
        final String cString = mJni.getCString("myq") ;
        final int cInt = mJni.getCInt(1, 2) ;
       
        Log.i(TAG, "cString--" + cString + "--cInt--" + cInt) ;
       
        setContentView(R.layout.main);
    }
}
 
注:
加載庫文件
static
 {
  System.loadLibrary("HelloNDK") ;
 }
十一、在eclipe中運行
 
3、附件說明
附件是個人demo文件
相關文章
相關標籤/搜索