用Eclipse+Cygwin+CDT+NDK來建立一個簡單的Android JNI 項目

來源:互聯網
上載者:User

你看這篇文章之前,必須保證前期工作已經完成,Android的開發環境已經搭建完成,Cygwin已經安裝成功,Eclipse的CDT外掛程式已經整合OK,NDK已經解壓正常(DNK的版本是android-ndk-r8b,必須保證ndk的版本不低於5)。

1.更給cygwin中的檔案:更改Cygwin_root\home\Administrator\.bash_profile檔案(Cygwin_root是Cygwin軟體的安裝根目錄),在.bash_profile檔案的末尾增加如下內容:

ANDROID_NDK_ROOT=/cygdrive/h/android-ndk-r8b
export ANDROID_NDK_ROOT

/cygdrive/h/android-ndk-r8b 就是cygwin軟體協議下得NDK的解壓的根路徑,cygdrive可以理解成cygwin軟體的協議,h/android-ndk-r8b是ndk的路徑。

2.建立一個Android項目,此項目中的Activity的名稱為MainActivity,然後建立jni檔案夾,jni檔案夾是用來存放mk檔案和c檔案的。

3.然後配置這個Android的項目:

3.1 建立一個Builders,如所示:

當點擊2時,選擇“Program”選項,給建立的Builder命名,如New_Builder(1).

3.2配置Builder的Main面板如下:

1.選擇cygwin軟體bin下面的bash.exe; 2.選擇cygwin軟體下面的bin檔案夾;3.--login -c "cd /cygdrive/g/workspace/HelloJni3 &&$ANDROID_NDK_ROOT/ndk-build" g/workspace/HelloJni3
就是當前Android項目的路徑,$ANDROID_NDK_ROOT就是最開始步驟中定義的變數。

3.3 配置Refresh面板:

1.選擇“Specific resource” 2.指定特定資源,選擇Android項目下面的libs檔案; 3. 選擇“Recursively include sub-folders”

3.4 配置Build Options面板:

 1.根據需要選擇何時進行build 2.Specify Resources 選擇此Android項目中建立的jni檔案夾。

4.MainActivity 的代碼如下:

package com.example.hellojni3;

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

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView textview = (TextView) findViewById(R.id.textview);
    textview.setText(fromString());

  }

  public native String fromString();

  static {
    System.loadLibrary("hello");
  }

5.jni 檔案夾下面建立Android.mk 檔案,內容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello-jni2.c

include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE 和上面Acitivity中System.loadLibrary 對應。LOCAL_SRC_FILES 就是c檔案的名稱,在jni檔案夾中建立hello-jni2.c檔案,

內容如下:

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

jstring
Java_com_example_hellojni3_MainActivity_fromString( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "from String!");
}

jstring 與Java中的String類相對應,Java_com_example_hellojni3_MainActivity就是Java開頭的包含native方法的Java類(即:com.example.hellojni3.MainActivity),fromString方法對應MainActivity中的  public native String fromString();方法。

6.當你更改c檔案時候重新編譯如:

7.運行結果如下:

希望對大家有所協助,互相學習提高吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.