Android Studio NDK开发

    xiaoxiao2021-03-25  88

    目前在Android studio中NDK有两种开发方式:

    1.Cmake方式:比较麻烦,可能google还没有完善,如果想使用的话直接读Android ndk开发文档,个人读了,Cmake方式比较麻烦

    2.ndk-build创建方式,(google官网也说了)个人还没有发现官网哪里有介绍

     这里介绍一个Android studio的快捷功能

    打开settings->进入External Tools;如果External Tools什么都没有的话,点击“+”进行创建 javah ndk-build 如图:

    按照图中配置和添加进行设置,注:注意下面三行中的内容填写,j

    Program:分别填写javah和ndk-build的实际硬盘中的目录

    Parameters:(其实是填写将在DOS中执行的命令)

    javah配置: -classpath $SourcepathEntry$\..\..\..\build\intermediates\classes\debug;C:\TypeCode\AndroidSDK\platforms\android-25\android.jar-d $SourcepathEntry$\..\jni -jni $FileClass$ 其中红字部分是你的android.jar包的位置 后面的-d,是你想输出.h文件的路径,这里是java目录下的jni目录 

    ndk-build配置:NDK_LIBS_OUT=$ModuleFileDir$\src\main\jniLibs 这个意思是输出到src\main下的jniLibs中,如果直接写,但是本地没这个目录的话,会直接创建一个,

    配置完点击ok,回到Android Studio项目根目录,如图,右键发现,列表中多了一个NDK,如图:

    到这里就配置完我们的工具了

    好,下面开始进行ndk配置,

    前提:下载ndk开发包,推荐一个网站www.androiddevtools.cn 下载各类Android工具,

    放在指定目录,进入Android studio中的project structure配置ndk路径,需要让AS找到ndk

    1.创建JniTest.java文件,右键该文件,选择上图中的javah,直接编译成.h头文件直接输出到自己设置的文件目录中,插入代码如下:

    public class JniTest{ static { System.loadLibrary("jnitest"); } //native方法 public static native String sayHello(); }

    2.生成的头文件如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class robot_tangwa_tangwarobot_JniTest */ #ifndef _Included_robot_tangwa_tangwarobot_JniTest #define _Included_robot_tangwa_tangwarobot_JniTest #ifdef __cplusplus extern "C" { #endif /* * Class: robot_tangwa_tangwarobot_JniTest * Method: sayHello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_robot_tangwa_tangwarobot_JniTest_sayHello (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif 3.自己在输出到头文件目录下编写.cpp文件,这里目录问java\jni 目录,点击创建c++文件JniTest.c,写方法

    #include "robot_tangwa_tangwarobot_JniTest.h" JNIEXPORT jstring JNICALL Java_robot_tangwa_tangwarobot_JniTest_sayHello (JNIEnv *env, jclass jclass){ return env->NewStringUTF("gaunzedong"); } 4.写Android.mk文件(.mk文件和头文件资源文件尽量在一个目录下)

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JniTest LOCAL_SRC_FILES := jnitest.cpp include $(BUILD_SHARED_LIBRARY)这里项目名字和资源文件自己根据自己的情况更改一下

    5.使自己的ndk和gradle产生关联 

    1)在gradle.properties 添加 (注意是project下的)

    android.useDeprecatedNdk = true 2)在app下的build.gradle中的defaultConfig模块下添加

    ndk{ moduleName "jnitest" ldLibs "log" abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a' } 3)build-》Make Project。进行项目make,使gradle关联上ndk

    Tools-》Android-》sysc Project

    4)通过在之前创建的jni文件夹上右键,(这次用到了ndk-build,我们之前创建的快捷功能),项目会直接生成在jniLibs下各类的库

    注:创建快捷功能这个方案是参考一个博客的,但是忘了链接

    以上就是配置ndk的过程,如果出现javah的问题,请参考前两篇文章,

    第一天写博客,可能有很多不足的地方和细节不对的地方,欢迎指出,同时很多问题需要根据自己电脑实际环境进行才能彻底解决问题。

    注:AS1.3等有一个bug,就是如果创建工程使用的是API23,则工程不能弹出project structure在windows的AS下,

    欢迎留言

    2017/10/6 17:36

    补充一条,如果需要导入外部的.so库需要在build.gradle 中的android下面添加sourceSets {         main {             jniLibs.srcDirs = ['libs']         }     }

    注:自学软硬嵌入式的可加QQ群:371776285

    转载请注明原文地址: https://ju.6miu.com/read-14180.html

    最新回复(0)