美文网首页
jni层代码的编写以及生成so库

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

作者: 青晨点支烟 | 来源:发表于2017-11-01 17:28 被阅读0次
    本文内容

    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库

          本文链接:https://www.haomeiwen.com/subject/hopgpxtx.html