首先還是按部就班地建立一個android示例工程“UseSharedLibDemo”,版本android-api9
<a href="http://blog.51cto.com/attachment/201301/131203114.jpg" target="_blank"></a>
仍然不厭其煩地運作一次,以确定我們的Demo工作正常。
輕按兩下打開項目樹,在“/libs”目錄下建立檔案夾“armeabi”(大小寫敏感),并将我們之前準備好的庫“libDemoModule.so”拷貝到該目錄下以備使用。
<a href="http://blog.51cto.com/attachment/201301/133852766.jpg" target="_blank"></a>
對于該庫的使用,我們并不需要知道“max”這個函數是怎麼實作的,隻需要知道它的JNI接口就可以了,對于庫“libDemoModule.so”中的“max”函數,現有接口如下:
JNIEXPORT jint JNICALL
Java_com_nativetools_NativeDemo_max(JNIEnv *env, jobject jthis, jint a, jint b);
根據上述接口的描述,為了在本項目中使用這個接口,我們需要建立包“com.nativetools”,并在本包下建立類“NativeDemo”,如下:
<a href="http://blog.51cto.com/attachment/201301/133332608.jpg" target="_blank"></a>
接着在類“NativeDemo”中加載庫“libDemoModule.so”,并對本地方法“max”進行聲明如下:
package com.nativetools;
public class NativeDemo {
static {
//加載需要使用的庫
System.loadLibrary("DemoModule");
}
//對庫中的本地方法進行聲明
public native int max(int a, int b);
}
這裡需要注意“System.loadLibrary("DemoModule")”中的“DemoModule”由我們的庫名去掉字首“lib”和字尾“.so”而來,并且大小寫敏感,否則會出現諸如找不到函數的實作、加載庫初始化失敗之類的錯誤,比如我們把大寫“D”改成小寫“d”,報錯如下,也為大家遇到錯誤後進行修正提供一個參考:
<a href="http://blog.51cto.com/attachment/201301/140514475.jpg" target="_blank"></a>
然後,然後事情就結束了,我們剩下要做的僅僅是在需要使用max函數的地方導入我們的工具包并調用max進行相關計算:
...
//導入本地方法所在工具包
import com.nativetools.NativeDemo;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NativeDemo nativetool = new NativeDemo();
//調用本地函數max
Integer i = nativetool.max(1024, 512);
new AlertDialog.Builder(this).setMessage(i.toString()).show();
<a href="http://blog.51cto.com/attachment/201301/135046457.jpg" target="_blank"></a>
可以看到庫中的“max”函數已經成功調用,需要注意的是,android端聲明native code的代碼需要嚴格按照JNI接口來組織,及本例中,JNI接口為
<a href="http://blog.51cto.com/attachment/201301/135601554.jpg" target="_blank"></a>
這也是我們為什麼要在項目中加入“com.nativetools.NativeDemo”這個類的原因。
Summary
bill自己也是剛接觸類似第三方庫的使用,打心底裡覺得本文還差很多東西,但自己也沒法說清楚,于是僅僅将自己目前如何使用.so的方法進行了簡要的說明,希望在以後的學習和工作中,能夠深入而具體的習得這方面的知識和技巧。
<a href="http://down.51cto.com/data/2362215" target="_blank">附件:http://down.51cto.com/data/2362215</a>
本文轉自Bill_Hoo 51CTO部落格,原文連結:http://blog.51cto.com/billhoo/1125559,如需轉載請自行聯系原作者