JNI初步(四) jni ndk -build 方式 完整版(简单)

建议先看一看jni的手动配置方法

https://blog.csdn.net/we1less/article/details/108691477

配置环节

1.进入Project Structure界面   配置NDK   没有下载一个

2.在项目的local.properties文件中同样配置一下(其实这块是自动生成的)

3.在gradle.properties文件中加上一行:

android.useDeprecatedNdk=true

4.在External Tools下配置两个插件。Settings  -->  Tools  -->  ExternalTools   点击+号增加。

            Program:    这里配置的是JDK目录下的javah.exe的路径。注意没有环境变量就直接找到对应jdk的路径下的 javah.exe

 $JDKPath$\bin\javah.exe  

            Parametes:     $FileClass$指的是要执行操作的类名(即我们操作的文件)

                                     $ModuleFileDir$/src/main/jni表示生成的文件保存在这个module目录的src/main/jni目录下。

-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$ 

            Working:         module目录下的src\main\java目录。

$ModuleFileDir$\src\main\java

使用方式:选中java文件-->右键-->External Tools-->javah-jni,将生成jni文件夹以及文件夹下的 包名.类名的.h头文件

5.ndk -build命令,是根据C/C++文件生成so文件的。

            Program:         这里配置的是ndk下的ndk-build.cmd的路径。

E:\androidSDK\ndk\21.3.6528147\ndk-build.cmd 

            Working:          

$ModuleFileDir$\src\main\

使用方式:选中C/C++文件-->右键-->ExternalTools-->ndk-build,将在main文件夹下生成libs文件夹以及多个so文件,我们可以移动至jniLibs目录下去。


6.在jni目录下增加两个文件        Android.mk

LOCAL_PATH := $(call my-dir)     // 设置当前的编译目录(Android.mk所在的目录) 

include $(CLEAR_VARS)            // 清除LOCAL_XX变量(LOCAL_PATH除外)
LOCAL_MODULE := JNI_ANDROID_AUDIO// 指定当前编译模块的名称  
LOCAL_SRC_FILES := NativePlayer.cpp    // 编译模块需要的源文件
include $(BUILD_SHARED_LIBRARY) // 指定编译出的库类型,BUILD_SHARED_LIBRARY:动态库;BUILD_STATIC_LIBRARY:静态库, BUILD_EXECUTEABLE指:可执行文件

如果要生成多个模块

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := JNI_STATIC_ANDROID_AUDIO1
LOCAL_SRC_FILES := NativePlayer.cpp
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := JNI_DYNAMIC_ANDROID_AUDIO2
LOCAL_SRC_FILES := NativePlayer2.cpp
include $(BUILD_SHARED_LIBRARY)

7.在jni目录下增加两个文件        Application.mk

APP_ABI    有四种类型(默认armeabi),armeabi、armeabi-v7a、x86、mips,设置时以空格隔开,all表示所有。

APP_MODULES    文件中的可选配置    的类似于上面Android.mk文件中的LOCAL_MODULE,以空格隔开,且会覆盖掉Android.mk文件中的LOCAL_MODULE设置(比如Android.mk文件中的写了两个jni库的配置,LOCAL_MODULE := JNI1、LOCAL_MODULE := JNI2,而Application.mk中设置的APP_MODULES := JNI1,则只能生成JNI1的so文件,要生成JNI2的so文件的时候会报错,除非写成APP_MODULES := JNI1 JNI2,这里我们直接省略默认使用Android.mk中的)。

APP_ABI := all

这时候我们可以在main目录下新建jniLibs文件夹,把生成的libs文件夹内的东西均复制过去,删除新生成的jni、libs、obj三个文件夹。


最后附上几个c++env的调用方法形式

jstring str = env->NewStringUTF("Im godv !");

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值