android studio 中编译C生成.so文件

1.创建一个类Utils(如果为了到时打包jar包,先创建个包名)

2.在gradle.properties文件中加入

android.useDeprecatedNdk=true

3.在Utils中写如native方法,然后在android studio的菜单build—>make project

public class Utils {

    //javaC中的方法都需要用native声明且方法名必须和c的方法名一样
    public native String getString();
}
4.切换出android studio的命令行terminal 

默认是在当前的项目根路径,在根路径输入cd app\src\main\java   

5.输入javah -d ../jni -encoding UTF-8 com.nodepp.jni.Utils()(../jni 代表生成的jni目录在app\src\main ),之后在app\src\main出现jni目录 ,并且产生一个.h文件com_nodepp_jni_Utils.h(包名_类名.h)。

 注意,第3,4步生成也可以采用以下方法

然后在命令行中先进入到工程的main目录下

输入命令:javah -d jni -classpath 自己编译后的class文件的绝对路径

例如:javah -d jni -classpath 

javah -d jni -classpath D:\yuyue\testJNI\app\build\intermediates\classes\debug com.nodepp.jni.Utils

(注意的debug之后又空格)

这种方法会产生和上面3,4步一样的结果

6.在jni下面创建一个.c文件(名字任意),在c文件里面要导入刚才生成的.h头文件

#include "com_nodepp_jni_Utils.h"

JNIEXPORT jstring JNICALL Java_com_nodepp_jni_Utils_getString
        (JNIEnv *env, jobject obj){
    return (*env)->NewStringUTF(env, "这是我测试的jni");
}//方法名称要跟生成的.h里面的名称一模一样
Java_包名_类名_方法名

7.最后在构建文件中的默认配置中加上:ndk配置

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "com.test.nodepp.testjni"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

        //ndk编译生成.so文件
        ndk {
            moduleName "goo"         //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

8. 在android studio的菜单build—>make project,然后会在app/build/ndk 看到生成的so文件

9.在Utils类文件中加入

public class Utils {
    static {
        System.loadLibrary("goo");//加载的库名称要和刚才ndk配置里的一样
    }
    //javaC中的方法都需要用native声明且方法名必须和c的方法名一样
    public native String getString();
}
10.直接像调用java的类方法一样直接调用getString()方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值