1.配置Anroid Studio(这步是关键)

使用[command+,] 打开Preferences,选择External Tools,点击加号框如下图:

Paste_Image.png

点击+号之后,打开Macros 配置宏命令界面,如下图:

Paste_Image.png

setting.png

javah.png

ndk-build.png

ndk-build clean.png

2.配置完成就可以使用javah 、ndk-build、ndk-build clean这三个命令了,那么在哪里使用这些命令,请看下图

tools.png

3.配置完成,我们开始新建工程MyNdk,然后新建jni目录

create jni.png

4.修改app下的build.gradle文件, 如下图

ndk{
moduleName "MyLibrary"
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}

app build.gradle.png

5.修改MyNdk下的gradle.properties文件(如果没有此文件,自己新建一个),如下图

android.useDeprecatedNdk=true

MyNdk gradle.properties.png

6.新建MyNdk.java

public class MyNdk {
static {
System.loadLibrary("MyLibrary");
}
public native String getString();
}

MyNdk.java.png

7.这步开始创建头文件,操作如下图(注意在MyNdk.java文件上点击右键)

create com_zhangyp_higo_myndk_MyNdk.h file.png

8.执行完成后jni目录下就创建了com_zhangyp_higo_myndk_MyNdk.h文件,然后我们在jni目录下编写 MyLibrary.cpp、Android.mk、Application.mk这三个文件,代码如下:

jni files.png

com_zhangyp_higo_myndk_MyNdk.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zhangyp_higo_myndk_MyNdk */ #ifndef _Included_com_zhangyp_higo_myndk_MyNdk
#define _Included_com_zhangyp_higo_myndk_MyNdk
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_zhangyp_higo_myndk_MyNdk
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_zhangyp_higo_myndk_MyNdk_getString
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif

MyLibrary.cpp

#include "com_zhangyp_higo_myndk_MyNdk.h"

JNIEXPORT jstring JNICALL Java_com_zhangyp_higo_myndk_MyNdk_getString
(JNIEnv * env, jobject obj){
return (*env).NewStringUTF("This is mylibrary !!!");
}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyLibrary
LOCAL_SRC_FILES =: MyLibrary.cpp
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := MyLibrary
APP_ABI := all

9.如何执行ndk-build,请看下图:(注意在jni目录上点击右键)

make ndk-build .png

10.得到so文件,如下图

so file.png

12.在MainActivity中调用,代码如下

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tv); tv.setText(new MyNdk().getString()); }
}

12.大功告成,可以运行了,oh yet!

MyLibrary.png

13.如果需要使用Android Studio调试c/c++请看这篇文章:Android Studio NDk调试(基于gradle-experimental插件与LLDB)

1.Android端使用retrofit上传多张图片,后端使用Php接收图片(包含前后端代码)
2.Android Studio NDk调试(基于gradle-experimental插件与LLDB)
3.让Android开发者相见恨晚的软件及插件
4.GitHub上一些超炫的Android开源项目推荐

文/zzyyppqq(简书作者)
原文链接:http://www.jianshu.com/p/e689d0196a17
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

超级简单的Android Studio jni 实现(无需命令行)的更多相关文章

  1. 超级简单的Android Studio jni 实现(无需命令行)【转载】

    原文: http://www.jianshu.com/p/e689d0196a17 1.配置Anroid Studio(这步是关键) 使用[command+,] 打开Preferences,选择Ext ...

  2. Android Studio JNI开发入门教程

    Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报  分类: JNI(3)    目录(?)[+]   概述 在Andorid ...

  3. android studio JNI使用

    Step: 1. 添加native接口注意写好native接口和System.loadLibrary()即可了,并无特别之处. Step: 2.执行Build->Make Project 生成了 ...

  4. Android 调试桥 (adb) 是 命令行命令--官方拷贝过来的,留作自己查看

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令 ...

  5. Windows下搭建Android NDK开发环境及命令行编译

    首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...

  6. Android Studio JNI 开发简单案例

    转载:http://www.androidchina.net/5744.html 进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C .C++ 写的,那么在 Android 中怎么调用底 ...

  7. Android Studio JNI体验

    近期项目中须要调用c/c++的实现,Android是支持JNI的.所以体验了一下JNI的全过程 1. 前期环境准备 (1) 下载NDK,网址是https://developer.android.com ...

  8. Android Studio Jni 环境搭建

    第一步:NDK环境搭建,点击下图红色框区域查看NDK下载和环境配置 安照正常情况是很慢的或者无法下载成功的,这个时候可以去下载NDK压缩包进行解压.下面给出两个下载地址 (1)官网:http://we ...

  9. Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发

    环境 windows 8  (注:其实 Linux 开发可能更方便) Android Studio 2.1; 一 . 下载 安装android-ndk开发包 地址:链接:http://pan.baid ...

随机推荐

  1. HttpClient的基本使用

    HttpClient的基本使用 前言 HttpClient是Apache提供的一个用于在Java中处理HTTP请求.响应操作的工具,由于JDK自带的API对HTTP协议的支持不是很友好,使用起来也不是 ...

  2. 想知道WiFi是什么样子的么?

    据英国<每日邮报>报道.英国纽卡斯尔大学博士生路易斯·赫南日前利用定制的仪器为WiFi信号拍照,绘制出一系列展现人类周围无形网络WiFi连接情况的图,这些盘旋环绕的明亮光束,宛如幽灵一般缠 ...

  3. 洛谷P1876 开灯

    题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短. 但是如果你不懂得呢?那...(自己去想) 题目描述 首先所有的灯都是关的(注意是关!),编号为1的人走过来, ...

  4. 【2017 Multi-University Training Contest - Team 10 】Monkeys

    [链接]点击打开链接 [题意] 给你一棵n节点的树,现在让你放k个猴子,可以删边,问最少可以剩余几条边,放k个猴子,满足任意一个猴 子至少与一只猴子相连.2<=k<=n<=1e5 [ ...

  5. Altium Designer如何删除以布的线

  6. 逻辑与和逻辑或:&& 、||

    逻辑或:首先看左边是真还是假(除了那5个都是真),如果为真,返回左边值,如果为假,返回右边的值 逻辑与:和逻辑或相同,先看左边的值是真是假,如果左边为真返回右边的值,左边为假返回左边的值 在两者同时出 ...

  7. POJ 3041 Asteroids 最小覆盖数

    http://poj.org/problem?id=3041 题目大意: 一辆宇宙飞船在一个小行星带中,你知道,这很危险.他有一种武器,可以清除掉一行或一列的小行星.问把小行星全部清除最少的武器使用次 ...

  8. 【Codeforces Round #443 (Div. 2) B】Table Tennis

    [链接] 我是链接,点我呀:) [题意] n个人站在一排. 每次第一个人和第二个人打架. 输的人跑到队列的尾巴去. 然后赢的人继续在队首.和第三个人打. 谁会先赢K次. [题解] 会发现,一轮之后就一 ...

  9. C语言结构体的字节对齐原则

    为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据 ...

  10. 【拆分版】 Docker-compose构建Logstash多实例,基于7.1.0

    [拆分版]Docker-compose构建Logstash多实例 写在最前 说起Logstash,这个组件并没有什么集群的概念,与其说是集群,不如说是各自去收集日志分析过滤存储到Elasticsear ...