[Android] 在Windows 開發環境中,開發NDK (3)

2013-02-21

 
在Windows 開發環境中,開發NDK (2) 這篇文章,我們寫了一個 native 的 function  NDKEcho

但是尚未實作,接下來,我們要如何繼續呢?

首先,我們先在專案下面建立一個檔案夾為jni

2013-02-21_192752

再來切換到命令提示字元,並且切換到專案路徑

我的電腦專案路徑為 C:\Users\no2on\Documents\AndroidProjects\NdkEchoSample

2013-02-21_192855

之後下一個指令

javah -jni -classpath bin/classes/ -d jni/ com.donma.ndkechosample.BaseLib

2013-02-21_194011

看起來沒什麼錯..看看專案結構

Refresh jni 檔案夾之後發現 裡面多一個檔案 com_donma_ndkechosample_BaseLib.h

2013-02-21_194150

大致上會長這樣,接下我們要開一個新檔案 com_donma_ndkechosample_BaseLib.c 來實作function

這時候我們在 jni 下面新增一個檔案,為 com_donma_ndkechosample_BaseLib.c

其內容為

com_donma_ndkechosample_BaseLib.c  Code :

#include <string.h>
#include "com_donma_ndkechosample_BaseLib.h"
 
JNIEXPORT jstring JNICALL Java_com_donma_ndkechosample_BaseLib_NDKEcho(
        JNIEnv * env, jclass clazz, jstring str) {
 
    //將jstring 轉  char *
    const char *source = (*env)->GetStringUTFChars(env, str, NULL);
    char msg[40];
    strcpy(msg,source);
    strcat(msg," by C++");
    puts(msg);
 
    //轉回Java String
    jstring result;
    result = (*env)->NewStringUTF(env, msg);
    return result;
}


因為測試,所以寫很簡單,再來,我們需要建立NDK 編譯mk 檔


依然在 jni 檔案夾下面 新增一個 名為 Android.mk 的檔案 其內容為



LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := com_donma_ndkechosample_BaseLib
LOCAL_SRC_FILES := com_donma_ndkechosample_BaseLib.c
include $(BUILD_SHARED_LIBRARY)

請注意, LOCAL_MODULE 以及 LOCAL_SRC_FILES 跟你的檔案跟package 有關,請小心設定


2013-02-21_200704


接下來,我們繼續回到命令提示字元,輸入 ndk-build


2013-02-21_200752 



其中他有一個警告,這跟我設定的編譯環境有關係,所以不影響,其中你看到他輸出為.so 檔案至lib下方


多了arm 的 so 檔案,當然如果你需要編譯其他平台可有 其他指令可以下…


看一下目錄結構


2013-02-21_200948 


接下來我們回到 BaseLib.java 補一段 載入library



package com.donma.ndkechosample;
 
public class BaseLib {
 
    public static String Echo(String src) {
        return src + " by Java";
    }
 
    public native static String NDKEcho(String src);
    
    static {
        System.loadLibrary("com_donma_ndkechosample_BaseLib"); 
    }
}
就是下方補上  System.loadLibrary

 

接下來就是Android Java主程式這邊的呼叫了..


當麻許的超技八 2014 | Donma Hsu Design.