Android Studio NDK开发

目前在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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值