本文内容
Android Jni层之间数据类型的转换
准备
在进行开发调试前,必须要做一些准备工作,比如开发环境的搭建,开发前先装好ndk,如果需要调试的话,还需要下载LLDB Server进行调试。
准备就绪的话先建一个项目
接着再关联ndk
成功ok,下一步,添加gradle-experimental插件,需要对这三个文件进行修改:
./build.gradle
./app/build.gradle
./gradle/wrapper/gradle-wrapper.properties
配置文件
./build.gradle
使用com.android.tools.build:gradle-experimental代替 com.android.tools.build:gradle
buildscript {
repositories {
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:2.3.3'
classpath "com.android.tools.build:gradle-experimental:0.9.3"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
./app/build.gradle
这部分改动比较大,修改及注释如下:
// 用com.android.model.application 代替 com.android.application
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 25
buildToolsVersion = '25.0.3'
defaultConfig {
applicationId = "cn.zkteco.jnidemo"
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 25
versionCode = 1
versionName = "1.0"
}
// 配置NDK
ndk {
// 生成so的名字,是必须的
moduleName ="aes128"
toolchain = 'clang'
CFlags.add('-std=c99')
// 添加依赖库
ldLibs.addAll(['android','OpenSLES', 'log'])
// 生成不同abi体系的so库
abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86']) //, 'x86_64', 'mips', 'mips64'
debuggable = true
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-android.txt'))
}
}
}
}
dependencies {
}
./gradle/wrapper/gradle-wrapper.properties
将distributionUrl改用稳定最新版本
distributionUrl=https\\://services.gradle.org/distributions/gradle-3.3-all.zip
总结
如果此时一切ok,那就建个类吧,这个类就是用来调用C/C++代码的
可自动生成jni文件夹和C代码
正常调用
当然代码也会经常要调试,点击as的edit configurations
有多种方式供你选择,一般都是在native,auto,java之间切换。。
另外调试的时候需要注意,如果修改了代码,重新运行前最好clean,make一下
当你的代码没有bug的时候就可以拿去.so库了,具体路径在:app\build\intermediates\binaries\debug
现在你可以拿so去用了,若果你想详细看看我的代码,移步到我的github。
又过了差不多的一天。
有任何问题可以一起交流