昨天試了一下JNI,遇到了一些問題,來整理一下
UBUNTU環境下
1.1首先到 官方載NDK
1.2增加環境變數 $gedit /etc/bash.bashrc 下增加
export NDK_HOME=/home/liao/android-ndk-r8e
export PATH=$NDK_HOME:$PATH
2.1安裝安裝CDT(編譯C用的),eclipse/help/install new software下安裝
開始作範例
1.建立一個專案TESTJNI
2.在TESTJNI下新增目錄jni
3.jni下新增Android.mk和myjni.c
4.Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TESTJNI ---->專案名稱
LOCAL_SRC_FILES := myjni.c ---->.c檔
include $(BUILD_SHARED_LIBRARY)
5.myjni.c
#include <string.h>
#include <jni.h>
jstring Java_com_example_testjni_Main_stringFromJNI( JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from My JNI !");
}
6.1.在 Eclipse 左邊的此專案,選右鍵 -> Properties -> Builders -> New -> Program
6.2.在 Main 分頁:
Name: NDK_Builder
Location(ndb-build位置): /home/user/android-ndk-r5c/ndk-build
Working Directory:(project位置): ${workspace_loc:${project_path}}
6.3.在 Refresh 分頁:
Refresh resources upon completion 打勾,並且在 Specific resources 選擇 libs 目錄
6.4.在 Build Options 分頁:
勾選 Allocate Console(necessary for input)、Launch in backgroud、After a "Clean"、During manual builds、During auto builds 和 Specify working set of relevant resources
在 Specific resources 選擇 jni
7.Main.java:
package com.example.testjni;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MyNDK extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
static {
System.loadLibrary("testjni");
}
}
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MyNDK extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
static {
System.loadLibrary("testjni");
}
}