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包

位置例如以下:
这里写图片描写叙述

最后结果例如以下:

图片名称


參考:

posted @ 2017-07-29 09:43  mfmdaoyou  阅读(453)  评论(0编辑  收藏  举报