Android JNI Windows配置

  1. 配置Android Studio;
    File -> Settings -> Tools -> External Tools点击加号框如下图:
Android JNI Windows配置_第1张图片
External Tools.png
Android JNI Windows配置_第2张图片
External Tools_1.png

配置javah 、ndk-build、ndk-build clean这三个命令

Program: $JDKPath$/bin/javah
Parameters: -classpath $Classpath$ -v -jni $FileClass$
Working directory: $SourcepathEntry$\..\jni  
Android JNI Windows配置_第3张图片
javah.png
Program: D:\java\androidstudio\sdk\ndk-bundle\ndk-build.cmd
Parameters: 
Working directory: $ProjectFileDir$\app\src\main
Android JNI Windows配置_第4张图片
ndk-build.png
Program: D:\java\androidstudio\sdk\ndk-bundle\ndk-build.cmd
Parameters: clean
Working directory: $ProjectFileDir$\app\src\main
Android JNI Windows配置_第5张图片
ndk-build clean.png
  1. 使用javah 、ndk-build、ndk-build clean这三个命令位置
Android JNI Windows配置_第6张图片
use.png
  1. 配置完成,我们开始新建工程JNI,然后新建jni目录
Android JNI Windows配置_第7张图片
jni.png
  1. 修改app下的build.gradle文件, 如下图

android {
    ...
  defaultConfig {
    ...
    ndk{
      moduleName "test"
    }
    sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['libs']
        }
    }
  }
  buildTypes {
      ...
  }
}
Android JNI Windows配置_第8张图片
图1.png
  1. 修改JNI下的gradle.properties文件(如果没有此文件,自己新建一个),如下图
android.useDeprecatedNdk=true
Android JNI Windows配置_第9张图片
图2.png
  1. 新建Test.java
public class Test {

  static {
    System.loadLibrary("Test");
  }
  public native String getString();

}

注:先build下整个工程,然后执行第7步

  1. 开始创建头文件,操作如下图(注意在Test.java文件上点击右键)
Android JNI Windows配置_第10张图片
图3.png
  1. 执行完成后jni目录下就创建了com_mazaiting_jni_Test.h文件,然后我们在jni目录下编写 Test.cpp、Android.mk、Application.mk这三个文件,代码如下:
Android JNI Windows配置_第11张图片
JNI Files.png

com_mazaiting_jni_Test.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class com_mazaiting_jni_Test */

#ifndef _Included_com_mazaiting_jni_Test
#define _Included_com_mazaiting_jni_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_mazaiting_jni_Test
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_mazaiting_jni_Test_getString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

Test.cpp

//
// Created by Administrator on 2017/10/30.
//
#include "com_mazaiting_jni_Test.h"

JNIEXPORT jstring JNICALL Java_com_mazaiting_jni_Test_getString
        (JNIEnv *env, jobject){
    return (*env).NewStringUTF("This is test jni!");
}

Applicaition.mk

APP_MODULES := Test
APP_ABI := all

Android.mk
具体解释请查看Android .mk文件语法规范

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Test
LOCAL_SRC_FILES := Test.cpp
include $(BUILD_SHARED_LIBRARY)
  1. 执行ndk-build,请看下图:(注意在jni目录上点击右键)
Android JNI Windows配置_第12张图片
ndk-build.png
  1. 得到.so文件
Android JNI Windows配置_第13张图片
so.png
  1. 在程序中应用

public class MainActivity extends AppCompatActivity {

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView textView = (TextView) this.findViewById(R.id.textView);
    textView.setText(new Test().getString());
  }
}
  1. 程序运行结果


    Android JNI Windows配置_第14张图片
    success.png

你可能感兴趣的:(Android JNI Windows配置)