[置顶] 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

相关文章
相关标签/搜索