Android ndk開發swig編譯jni介面

來源:互聯網
上載者:User

Android ndk開發swig編譯jni介面

相信越來越多Android程式員需要用到Android ndk開發swig編譯jni介面,因為這設計到底層編程,如果開發的項目是有硬體產品的話,那更要熟悉這方面的編程。我網上也看了很多關於這方面部落格。總的來說,都有一定區別。那我介紹也是跟網上有一定的區別,首先說一下編譯環境配置。Android開發編譯環境就不用我多說了吧。我用ndk版本是這個android-ndk-r8d-windows,swig編譯時間這個swigwin-3.0.2。如果怕網上找不到這兩個壓縮包,就評論區留下郵箱吧。

1、載入ndk位置,首先說一下這個路徑,一定不能有空格,或者中文。

window----preferences------Android------NDK 如:

二、項目右鍵找到Android tool------add native suppot 按下去,出現:確定

三、現在項目的目錄結構是這樣的。如所示:

四、配置swig路徑。以及輸出目錄。

點擊如上方箭頭所示,出現external tool configurations,點擊這個。

在中左側建立,輸入名稱。然後是swig的路徑,每個人按照自已去弄。

working directory : 這個是一樣 ${project_loc}

arguments:

-c++ -java -package com.example.jnidmeo
-outdir src/com/example/jnidmeo jni/Unix.i

這裡意思是編譯成java存放的目錄,以及需要編譯c++檔案的位置,根據自已項目包名填寫。

apply同意,如果你還沒寫好c++,就不要點擊run。寫好要編譯c++,在點擊run。

五、jni目錄下application.mk配置如下,如果沒有這個檔案,自已建立一個,寫下配置.

APP_ABI := armeabi

APP_STL := stlport_static

六 Android.mk配置

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JniDmeoLib //這個是產生庫的名字
LOCAL_SRC_FILES := Unix_wrap.cxx

include $(BUILD_SHARED_LIBRARY)

這上面意思自已去百度一下,篇幅過長,先不做解釋

七 Unix.i檔案配置如下:

%module JniDmeoLib

%include std_string.i

%{
#include
#include
%}
%include
%include

八 此時目錄如:

九 現在就回到那個按鍵點擊 Run 返回剛才你配置那裡Run,出現,不報錯就是那個樣子:

十、最後產生效果,以及目錄找到那個JniDmeoLibJNI.class

開啟,寫上載入庫

static{
System.loadLibrary(JniDmeoLib);
}

如下代碼:加粗的地方就是需要寫的,雙引號是你的庫名字。

/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 3.0.2 * * Do not make changes to this file unless you know what you are doing--modify * the SWIG interface file instead. * ----------------------------------------------------------------------------- */package com.example.jnidmeo;public class JniDmeoLibJNI {//下面static要自已寫上去,載入產生JniDmeoLib庫.JniDmeoLib是庫名字static{System.loadLibrary(JniDmeoLib);}  public final static native long new_CTest();  public final static native void delete_CTest(long jarg1);  public final static native double CTest_getTest(long jarg1, CTest jarg1_, double jarg2, double jarg3);  public final static native long new_CoutputChar();  public final static native void delete_CoutputChar(long jarg1);  public final static native String CoutputChar_getfileName(long jarg1, CoutputChar jarg1_);  public final static native void CoutputChar_setfileName(long jarg1, CoutputChar jarg1_, String jarg2);}


十一、選中你的項目,再點擊project-----build project,出現圖下:產生so庫,以及存放的路徑

十二、最後目錄時這樣的。

十三、測試代碼

package com.example.jnidmeo;import android.os.Bundle;import android.app.Activity;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity {//使用swig自動編譯出來的jni介面調用c++裡面方法實現的private CTest mCTest = new CTest();private CoutputChar mCoutputChar = new CoutputChar();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mCoutputChar.setfileName(strname);}//測試調用c++方法public void BtTest(View v) {TextView tvShow = (TextView) findViewById(R.id.tv_test);tvShow.setText(CoutputChar擷取值:+ String.valueOf(mCoutputChar.getfileName()) + , CTest:計算值+ String.valueOf(mCTest.getTest(1.99, 2.88)));}}

 

你可以設定為庫,產生jar包,jar包和so檔案拿到其它項目去用。
到這裡就結束了,如有不清楚地方請留言。

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.