Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android ndk開發swig編譯jni接口

Android ndk開發swig編譯jni接口

編輯:關於Android編程

相信越來越多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();

	@Override
	protected 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文件拿到其它項目去用。
到這裡就結束了,如有不清楚地方請留言。

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved