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的相关知识和用法.通过本系列视频课程,大家能够从零到一经历一个完整项目的开发,并在课程中了解实战项目开发的流程和项目设涉及的各个模块 ...
随机推荐
- hadoop配置文件: hdfs-site.xml, mapred-site.xml
dfs.name.dir Determines where on the local filesystem the DFS name node should store the name table( ...
- idea调试查看mybitis发送的语句(引用)
MyBatis 的配置文件 Configuration 中有相关属性,设属性即可,不用再放一个 log4j.properties 文件. <configuration> <setti ...
- JS获取屏幕宽度
document.write("屏幕分辨率为:"+screen.width+"*"+screen.height+"<br />" ...
- "R6002 floating point support not loaded"错误
R6002 floating point support not loaded 错误,在Debug模式下会弹出如下错误: "floating point support not loaded ...
- Linux常用命令与基本概念
复制 文件的复制 cp 源文件 目标文件 文件夹的复制 cp -r 源文件夹 目标文件夹 删除 删除文件 rm 文件名 删除文件夹 rm -rf 文件夹 查看文件类型 file 文件名 压缩与解压 z ...
- CMake 使用笔记
记录 CMake 相关知识. Prelude:读文档一定要有耐心! 问题一 CLion: CMakeLists.txt 中 set(CMAKE_CXX_FLAGS -Wall) 不起作用 Soluti ...
- POJ 3621 Sightseeing Cows(最优比例环+SPFA检测)
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10306 Accepted: 3519 ...
- FTB操作
一些参考案例下面是一些常用的ftp操作文件的方法 案列1 using System; using System.Collections.Generic; using System.Text; usin ...
- MFC点击控件拖动窗口
void CMouseClickDlg::OnLButtonDown(UINT nFlags, CPoint point) { CDialogEx::OnLButtonDown(nFlags, poi ...
- vue项目中使用iconMoon图标
前两篇文章写了一下如何在vue项目中使用vue-awesome和阿里的iconfont,这里介绍一下如何使用iconMoon图标 iconMoon和前两者相比可以生成自己的矢量图,这点是我喜欢的.至于 ...