Android 开发之JNI/NDK编程实战(三):Jni编程之调用第三方so库

    有时在项目中,我们不需要编写C++代码,而是由C++开发人员提供so库供我们调用,那如何调用第三方so库呢?本文以上文Android 开发之JNI/NDK编程实战(二): Jni编程之使用ndk+gradle生成so库中生成的so库为例。

步骤:

  • 1.新建项目,拷贝so库到libs目录
  • 2.编写app下的build.gradle脚本,在android节点中加入sourceSets ,声明so文件的路径
  • 3.编写JniLib.java实现类,在MainActivityz中实现调用
  • 4.报错分析

1.新建项目,拷贝so库到libs目录

2.编写app下的build.gradle脚本,在android节点中加入sourceSets ,声明so文件的路径

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.psp.jnitest3"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

3.编写JniLib.java实现类,在MainActivityz中实现调用

MainActivity.java中的代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(new JniLib().getJniString());
    }


}

4.报错分析

运行项目时,发现报错如下:

说是找不到调用的方法,我们回过头来分析上篇博文中的C++实现的代码,发现原来时候包名对不上

于是我们更改JNI实现类JniLib的包名,和JniLib.cpp中的保持一致

然后再编译,运行成功。

猜你喜欢

转载自blog.csdn.net/pshiping2014/article/details/81666408