[置頂] android利用jni調用第三方庫——第二篇——編寫庫android程序直接調用第三方庫libhello.so

0:前言html

1:本文主要做爲丙方android公司的身份來寫java

2:做者有不對的地方,請指出,謝謝
android

 

[第一篇:android利用jni調用第三方庫——編寫庫libhello.so]app

[第二篇:android利用jni調用第三方庫——編寫庫android程序直接調用第三方庫libhello.so]ide

[第三篇:android利用jni調用第三方庫——編寫庫android程序整合第三方庫libhello.so到本身的庫libhelloword.so]函數

1:場景:公司接到任務,說配合乙方C++公司開發android識別程序,項目佈置到項目經理,而後經理把任務交給你來作,你天然是先抱怨一番,活多錢少讓我這新人來幹,哎沒辦法啊,幹吧!ui

2:東西:乙方C++公司交給個人東西有this

libhello.so庫文件
com_hello_hello_HelloActivity.h頭文件(有可能沒有這個,我是死命要來的)
庫的接口說明文檔

3:搞起:spa

 

  1. 看了看給的接口說明文檔,哎呦,不錯哦,文檔說明很詳細,裏面的函數接口定義的完美,並且他的庫定義符合jni的規範,不須要在添加什麼東西了,直接在android程序中調用就行,good啊
  2. 新建項目helloword2,在根目錄下新建libs/armeabi文件夾,而後把庫libhello.so放進去,而後重頭戲來了-》新建包com.hello.hello,原來的包叫com.hello.word,之因此這樣作,是我經歷了一個痛苦的過程總結出來的,他給的頭文件
    com_hello_hello_HelloActivity.h   //符合jni的規範,前面com_hello_hello是包名,後面HelloActivity是類名,注意在丙方這裏叫類名,在乙方那裏叫Activity的名字
    可以看出來他的包結構,而後就創建一個和他同樣的包,在這個包中新建一個和他同樣的類,類中的方法按照jni規範可以得出來是什麼,好比
    JNIEXPORT jstring JNICALL Java_com_hello_hello_HelloActivity_sayHello(JNIEnv *, jclass);//其中有一個方法是無參數函數sayHello
    結構如圖
  3. 類HelloActiviry.java的代碼
    package com.hello.hello;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.os.Bundle;
    
    public class HelloActivity  {
    //	static
    //	  {  
    //	      System.loadLibrary("hello");  //實驗證實在這裏不須要引入包名也是能夠的
    //	  }
    	public static native String sayHello(); // 第三方庫函數
      
    }

  4. android主程序Helloword2Acitiviry.java的代碼
    package com.hello.word;
    import com.hello.hello.HelloActivity;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.os.Bundle;
    public class Helloword2Activity extends Activity {
    	static
    	{   
    		System.loadLibrary("hello");  //引入包名
    	}
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            new AlertDialog.Builder( this ).setMessage(new HelloActivity().sayHello()).show();//實例化類方法直接調用
        }
    }
  5. 運行android程序,注意你寫的是android程序,不須要修改編譯選項,運行如圖,實驗證實,利用android直接調用庫是能夠的
  6. 可是這種直接調用也是有弊端的,在第三篇中會介紹-》》》[第三篇:android利用jni調用第三方庫——編寫庫android程序整合第三方庫libhello.so到本身的庫libhelloword.so

4:下載demo[猛戳這裏下載demo
.net

相關文章
相關標籤/搜索