2013年7月14日 星期日

運用Android NDK




昨天試了一下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");
    }

}