Android-ndk 调用现有的动态库

如上节所属,我们已经配置好了NDK环境,实现了简单的jni调用,生成了对应的动态库.so文件,这里就测试下在另外一个应用中调用这个.so文件。

1.找到需要的.so文件。

如上节所述,通过编译,在app/build/intermediates/ndk下生成了编译后的文件,在debug文件夹下lib文件夹的内容就是所需的.so文件,文件目录如下:


2.新建项目并导入.so文件

将上图三个文件夹放在app下的libs文件夹中,并在APP的build.gradle中配置jni的文件路径,配置在与buildTypes同级下,如图:

/**
     * 关于。so的配置
     */
    sourceSets{
        main{
            jniLibs.srcDirs = ['libs']
        }
    }



3.调用该.so文件的Java类的创建:
	需要注意的是这里的Java类的类名报名和方法名需要和生成.so文件的.c/.c++文件中描述的相同,如我的c文件内容如下:
//
// Created by 石博 on 2017/3/22.
//

#include <jni.h>
#include <android/log.h>
#ifndef LOG_TAG

#define LOG_TAG"ANDROID_LAB"

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

#endif



/* Header for class lab_sodino_jnitest_MainActivity */



#ifndef _Included_com_example_shibo_testndk1_JniManage

#define _Included_com_example_shibo_testndk1_JniManage

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:lab_sodino_jnitest_MainActivity

 * Method: getStringFromNative

 * Signature: ()Ljava/lang/String;

 */


JNIEXPORT jstring JNICALL Java_com_example_shibo_testndk1_JniManage_getStringByJni

        (JNIEnv *env, jobject jObj){

    LOGE("log string from ndk.");

    return (*env)->NewStringUTF(env,"HelloFrom JNI!");

}



#ifdef __cplusplus

}

#endif

#endif
,呢么我在新建类的时候包名和类名也要是com.example.testndk1.JniManage,方法名也要是getStringByJni,具体代码如下:
package com.example.shibo.testndk1;

/**
 * Created by shibo on 2017/3/22.
 */

public class JniManage {
    static {
        System.loadLibrary("testNdk");
    }
    public native String getStringByJni();
}

4.测试
	让JniManage进行jni调用,并在控制台输出log,测试完成。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值