[轉]Android調用so檔案(C程式碼程式庫)方法詳解

來源:互聯網
上載者:User

標籤:

一、為什麼調用c的dll要用源碼編譯成so庫

Android系統是基於linux核心的移動終端系統,而dll是在windows環境下產生和調用的c庫,所以不可以直接為android系統調用。

二、安裝(I)安裝cygwin

1.下載cygwin
cygwin可以在windows上虛擬unix編譯環境,還內建了許多linux的編輯器等工具,可供選擇安裝。在本項目中cygwin主要用來編譯產生so庫。所以重在安裝gcc、make包。
到http://cygwin.com/setup.exe下載安裝程式

2.選擇“install from Internet”


3.選擇安裝目錄

4.選擇下載儲存目錄

5.選擇“Direct Connection”

6.選擇一個鏡像點進行下載

我一開始選了個感覺比較近的給力的mirrors.163.com(速度300-400k左右),結果下載到51%不走了(1個小時左右),後來乖乖的換 回mirrors.kernel.org速度有點慢,但安裝成功了(40k左右,出去溜達了,不知道用了多長時間,中午開始的晚上6點回來的)。

7.Category欄找到Devel點擊右側使Default變成install,其他包預設。安裝即可。

8.測試。案頭點開該程式,輸入make-v,gcc-v指令測試。

(II)安裝ndk

1.下載ndk(window.zip版本),例如android-ndk-r8-windows.zip
2.解壓到一個目錄,如D:\android\android-ndk-r8
3.開啟cygwin安裝目錄下home\Administrator\.bash_profile,並在末尾追加
NDK=/cygdrive/d/android/android-ndk-r8
export NDK
(傳說要用vim或nodepad開啟,否則cygwin不認,我本來就用的vim,所以沒實驗過直接用txt開啟的後果)。

4.重新啟動,輸入cd $NDK斷行符號,介面應如下:

5.在cygwin下用cd換到d盤要先加/cygdrive/d

三、第一個調用so的Android工程

1.建立android工程(MyFirstJNI)
2.修改代碼,如下:

public class JniTest extends Activity{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// setContentView(R.layout.main);TextView tv = new TextView(this);tv.setText(""+intFromJNI());setContentView(tv);}public static native  int intFromJNI();//口static {System.loadLibrary("MyFirstJNI");}}


其中intFromJNI為要從so中調用的函數。我們要先為so檔案產生.h檔案。
3.通過cygwin跳轉到Android工程的bin\classes目錄下,然後輸入javah命令對.class檔案進行編譯。如:
javah -jni com.will.myfirstjni.MyFirstJni
編譯成功會在classes目錄下產生.h檔案,如:
com_will_myfirstjni_MyFirstJni.h
4.在項目中建立檔案夾jni,將.h檔案拷貝到其下,添加一個同名的.c檔案。將.h中的函數拷貝到.c中添加函數的參數。如下。

#include <string.h>#include <jni.h>JNIEXPORT jint JNICALL Java_com_will_myfirstjni_MyFirstJni_intFromJNI(JNIEnv *k, jclass j){return (jint)100000;}


5.到ndk目錄sample\hello-jni\jni目錄下複製Android.mk檔案到工程的jni目錄。
主要修改如下兩行代碼:

LOCAL_MODULE    := MyFirstJNILOCAL_SRC_FILES := com_will_myfirstjni_MyFirstJni.c


LOCAL_MODULE--項目名
LOCAL_SRC_FILES--c檔案名稱

6.在cygwin中跳到jni目錄,輸入$NDK/ndk-build命令,進行編譯,此時會產生libs\armeabi\libMyFirstJNI.so檔案。如果沒有看到,右鍵refresh一下。

7.啟動模擬器,效果如下。

[轉]Android調用so檔案(C程式碼程式庫)方法詳解

相關文章

聯繫我們

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