Android studio 3.1.2 so库生成

一.前言

1.开发环境,windows 系统,Android Studio 3.1.2
2.Ndk下载(不需要翻墙,ndk环境配置自行百度)
3.本篇文章适合,首次接触jni方面的童靴,大佬请绕道;

二.创建demo,生成so文件

1.1.创建JniSoTest工程

  • 新建一个Android Studio工程(同创建其它工程一样)JniSoTest,新建一个JniSo.java文件。
//JniSo类
public class JniSo {
    static {
        System.loadLibrary("JniSo");
    }

    public native static String getString();
}

1.2.执行make project

  • 在导航栏上操作,build --> make project,然后可以看到生成的JniTest类的class文件,路径为:app\build\intermediates\classes\debug\jack\jnisotest\JniSo.class,其中jack\jnisotest\由自己的包名决定;

注意:
JniTest.class文件的生成还有另外一种方式,在控制台输入命令,进入JniTest.java所在的目录。然后使用javac JniTest.java命令,即可生成JniTest.class文件;使用该方式生成的class文件,那么对应的生成头文件的步骤也不同。需要回到C:\project_learn\JniSoTest\app\src\main\java>目录,执行命令:
javah -jni jack.jnisotest.JniSo。其中jack.jnisotest由包名决定;
使用Android studio 3.4尝试了build --> make project,没有出现JniTest.class文件。具体原因自己没有搞明白;

1.3.生成头文件

打开Android Studio的控制台,也就是Terminal,执行命令:

javah -jni -classpath C:\project_learn\JniSoTest\app\build\intermediates\classes\debug jack.jnisotest.JniSo
//其中jack.jnisotest为包名
  • 执行1.3中的命令之后,会在当前目录下生成文件:jack_jnisotest_JniSo.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jack_jnisotest_JniSo */

#ifndef _Included_jack_jnisotest_JniSo
#define _Included_jack_jnisotest_JniSo
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jack_jnisotest_JniSo
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jack_jnisotest_JniSo_getString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

1.4.新建jni目录

  • 在main目录下新建一个目录,命名为jni,将生成的.h文件放在jni目录下;
    新建jni目录

1.5.创建cpp文件

  • 在叫文件夹下新建JniSo.cpp文件,复制内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jack_jnisotest_JniSo.h>

/* Header for class jack_jnisotest_JniSo */

/*
* Class: com_jni_jnitest_JNITest
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_jack_jnisotest_JniSo_getString
(JNIEnv * env, jobject jobject){

return (*env).NewStringUTF("来自JNI的内容");

}

1.6.创建mk文件

  • 在jni文件夹下新建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniSo
LOCAL_SRC_FILES =: JniSo.cpp
include $(BUILD_SHARED_LIBRARY)
  • 在jni文件夹下新建Application.mk文件,其中JniSo需要对应JniSo.java中的JniSo
APP_MODULES := JniSo      
APP_ABI := all

1.7.gradle配置

android {
    //省略其它...
    defaultConfig {
        //省略其它...
        ndk {
            moduleName "JniSo"    //JniSo要与JniSo.java中的对应
            //abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定的三种abi体系下的so库
        }

    }
    //省略其它...
    //生成的so文件所在的位置
    sourceSets.main{
        jniLibs.srcDirs = ['libs']
    }
}

1.8.so文件生成

  • 在控制台上使用ndk-build命令

注意:先查看当前所在目录的位置,C:\project_learn\JniSoTest\app\src\main\java>,即在xxx\app\src\main\java目录下,输入命令:ndk-build,即可生成so文件;

1.9.使用so库

//注意1:使用之前,可以将so文件迁移到对应的位置
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //注意2:若new JniSo().getString()显示黄色,可能so库调用不会成功,
        //需要重新检查以上操作是否出现问题
        ((TextView)findViewById(R.id.tv)).setText(new JniSo().getString());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值