JNI开发(2)——开发实战
JNI开发(1)——概述、环境搭建、必要知识点
JNI开发(2)——开发实战
本篇是重头戏:JNI实战开发。假设你对于 JNI、NDK 还没概念的话 那么观看本篇 也是没有太大难度的 ,哈哈哈哈!
!。
一些关于Android中NDK开发的一些知识请看我们上一篇: JNI开发(1)——概述、环境搭建、必要知识点
划掉的部分是Eclipse须要 Android studio不须要的流程
配置
红色标注的4个文件是须要手动改动的文件:
gradle-wrapper.properties文件内容为例如以下
distributionUrl=https\://services.gradle.org/distributions/gradle-xx-xx.zip
- 改动Project(非Module)下的
Gradle文件,将gradle版本号改为实验版本号
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.0-alpha1'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 改动Module下的Gradle文件 ,细节方面请自行对比…
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.3"
defaultConfig {
applicationId = "com.wenld.jni.jnidemo"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 23
}
/*
* native build settings
*/
ndk {
moduleName = "test" // 设置生成的文件名称
ldLibs.addAll(['log', 'android', 'EGL', 'GLESv1_CM'])
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.pro'))
}
}
productFlavors {
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
// create("arm8") {
// ndk.abiFilters.add("arm64-v8a")
// }
create("x86") {
ndk.abiFilters.add("x86")
}
// create("x86-64") {
// ndk.abiFilters.add("x86_64")
// }
// create("mips") {
// ndk.abiFilters.add("mips")
// }
// create("mips-64") {
// ndk.abiFilters.add("mips64")
// }
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.2.1'
}
- 根文件夹下
gradle.properties文件 加入例如以下一行
android.useDeprecatedNdk=true
- 生成jni文件夹
配置就差点儿相同OK了,接下来进入实战
实战
编写声明了 native 方法的 Java 类
声明这是一个native函数,由本地代码实现,使用native关键字;依照下图的操作就能够自己主动创建MyLibrary.c文件
/**
* Created by wenld- on 2016/4/15.
*/
public class MyNdk {
static {
System.loadLibrary("test");
}
public native String getString();
}
windows 使用 alt+ enter 键。会自己主动创建.c文件到jni文件夹
改动 test.c 文件 内c++代码
这边我输出字符串:"this wenld's jniDemo"
.so包
位置例如以下:
最后结果例如以下:
參考:
- Android Studio使用gradle-experimental构建NDK工程
- 一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
- Android Studio使用新的Gradle构建工具配置NDK环境:
- Android Studio 1.5 RC1搭建NDK开发环境
- JNI开发新手教程
- Android NDK API
- Android NDk 开发简易教程
- 使用Android Studio 1.3 版本号进行NDK开发
- IDEA 及 GRADLE 使用总结
- JNI 开发流程
- Android studio配置本地Gradle
- Android Studio NDk调试(基于gradle-experimental插件与LLDB)
p=1020">JNI资料
- github:https://github.com/googlesamples/android-ndk
JNI开发(2)——开发实战的更多相关文章
- Android安卓书籍推荐《Android驱动开发与移植实战详解》下载
百度云下载地址:点我 Android凭借其开源性.优异的用户体验和极为方便的开发方式,赢得了广大用户和开发者的青睐,目前已经发展成为市场占有率很高的智能手机操作系统. <Android驱动开发与 ...
- Cordova - 使用Cordova开发iOS应用实战3(添加Cordova控制台插件)
Cordova - 使用Cordova开发iOS应用实战3(添加Cordova控制台插件) 前文介绍了通过 Safari 的 Web检查器,可以看到控制台输出的信息.但有时这样调试代码不太方便,如果在 ...
- Cordova - 使用Cordova开发iOS应用实战2(生命周期、使用Safari调试)
Cordova - 使用Cordova开发iOS应用实战2(生命周期.使用Safari调试) 前文我们创建了一个简单的Cordova项目,结构如下: 1,Cordova生命周期事件 (1)device ...
- Cordova - 使用Cordova开发iOS应用实战1(配置、开发第一个应用)
Cordova - 使用Cordova开发iOS应用实战1(配置.开发第一个应用) 现在比较流行使用 html5 开发移动应用,毕竟只要写一套html页面就可以适配各种移动设备,大大节省了跨平台应用的 ...
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...
- Ruby入门--Linux/Windows下的安装、代码开发及Rails实战
Ruby入门--Linux/Windows下的安装.代码开发及Rails实战 http://www.linuxidc.com/Linux/2014-04/100242.htm Ubuntu 13.04 ...
- BDD敏捷开发入门与实战
BDD敏捷开发入门与实战 1.BDD的来由 2003年,Dan North首先提出了BDD的概念,并在随后开发出了JBehave框架.在Dan North博客上介绍BDD的文章中,说到了BDD的想法是 ...
- Python爬虫开发与项目实战
Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...
- Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)
Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码) 转 https://blog.csdn.net/lhl1124281072/article/details/800 ...
- Web项目开发介绍及实战项目介绍
引言 本系列课程我们将学些Golang语言中的Web开发框架Iris的相关知识和用法.通过本系列视频课程,大家能够从零到一经历一个完整项目的开发,并在课程中了解实战项目开发的流程和项目设涉及的各个模块 ...
随机推荐
- 重做LVM文件系统之减小PV
命令 缩小PV空间到120G,即PV上的vg00已将缩小到120G pvresize --setphysicalvolumesize 120g /dev/sda2 背景 机器上有一块900G本地的本地 ...
- aplusb 数论
题目描述 SillyHook 要给小朋友出题了,他想,对于初学者,第一题肯定是a+b啊, 但当他出完数据后神奇地发现.in 不见了,只留下了一些.out,他想还原.in,但 情况实在太多了,于是他想要 ...
- leetcode 389 map iterator 的使用
class Solution { public: char findTheDifference(string s, string t) { map<char,int>Map_Temp; ; ...
- C语言位运算符:与、或、异或、取反、左移与右移详细介绍
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...
- (转载--修改)使用Xcode9的Instruments检测解决iOS内存泄露
作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我 ...
- BZOJ 3897: Power
3897: Power Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 218 Solved: 83[Submit][Status][Discuss] ...
- POJ1385 Lifting the Stone
There are many secret openings in the floor which are covered by a big heavy stone. When the stone i ...
- c language compile process.
- SqlServer不允许更改字段类型(表中已有数据)
工具-选项-设计器-阻止保存要求重新创建表的更改,√去掉.
- C#性能优化篇 - 基于索引器封装EPList
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...