jni层代码的编写以及生成so库

本文内容

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。
又过了差不多的一天。

有任何问题可以一起交流

你可能感兴趣的:(jni层代码的编写以及生成so库)