博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android JNI Windows配置
阅读量:6470 次
发布时间:2019-06-23

本文共 2596 字,大约阅读时间需要 8 分钟。

  1. 配置Android Studio;
    File -> Settings -> Tools -> External Tools点击加号框如下图:
img_9c8b21e1c897e59bc659d61ce46ee58a.png
External Tools.png
img_a64144fb6f6fe941bb1361d312d208de.png
External Tools_1.png

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

Program: $JDKPath$/bin/javahParameters: -classpath $Classpath$ -v -jni $FileClass$Working directory: $SourcepathEntry$\..\jni
img_324fcfd89d31bb5b9c4093e371cbbc76.png
javah.png
Program: D:\java\androidstudio\sdk\ndk-bundle\ndk-build.cmdParameters: Working directory: $ProjectFileDir$\app\src\main
img_7b0c5b752fe43c1247c10341e15aa8be.png
ndk-build.png
Program: D:\java\androidstudio\sdk\ndk-bundle\ndk-build.cmdParameters: cleanWorking directory: $ProjectFileDir$\app\src\main
img_f7b1cd1a055efef76f22cad47a8ed077.png
ndk-build clean.png
  1. 使用javah 、ndk-build、ndk-build clean这三个命令位置
img_bc9a8e285ea5af224789641588aad718.png
use.png
  1. 配置完成,我们开始新建工程JNI,然后新建jni目录
img_938b7456630a50af4b3af7506412a8e9.png
jni.png
  1. 修改app下的build.gradle文件, 如下图
android {    ...  defaultConfig {    ...    ndk{      moduleName "test"    }    sourceSets {        main {            jni.srcDirs = []            jniLibs.srcDirs = ['libs']        }    }  }  buildTypes {      ...  }}
img_df480095d77696e84bcf11ae01f880ca.png
图1.png
  1. 修改JNI下的gradle.properties文件(如果没有此文件,自己新建一个),如下图
android.useDeprecatedNdk=true
img_5cca7b63ffd095b39a4765c8eb82cab8.png
图2.png
  1. 新建Test.java
public class Test {  static {    System.loadLibrary("Test");  }  public native String getString();}

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

  1. 开始创建头文件,操作如下图(注意在Test.java文件上点击右键)
img_0ab37df6eccc6d0b7ca4258bc4345ec4.png
图3.png
  1. 执行完成后jni目录下就创建了com_mazaiting_jni_Test.h文件,然后我们在jni目录下编写 Test.cpp、Android.mk、Application.mk这三个文件,代码如下:
img_505717edadbf1996e176dfb7498e02e5.png
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 __cplusplusextern "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 := TestAPP_ABI := all

Android.mk

具体解释请查看

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := TestLOCAL_SRC_FILES := Test.cppinclude $(BUILD_SHARED_LIBRARY)
  1. 执行ndk-build,请看下图:(注意在jni目录上点击右键)
img_e019ebe0ca57d1ee9a4d5272a259623e.png
ndk-build.png
  1. 得到.so文件
img_3198c2d80ede1024e58ecbdcf7608997.png
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. 程序运行结果

    img_fd22db01ea2dbf14b0f2dfd55e1d98bc.png
    success.png

转载地址:http://oyjko.baihongyu.com/

你可能感兴趣的文章
实现用户要求的若干道2年级四则运算题程序测试
查看>>
dataList中实现用复选框一次删除多行问题
查看>>
Java中throws和throw的区别讲解
查看>>
Spring(四)注解配置Ioc
查看>>
FreeCodeCamp:Confirm the Ending
查看>>
把媒体当手段还是当目的?
查看>>
pycharm 常用设置
查看>>
Win8 XAML 自定义控件资源加载与释放窍门
查看>>
hdu2149
查看>>
你真的会使用XMLHttpRequest吗?
查看>>
二分图匹配的两个主要算法 模板
查看>>
Windows XP系统上安装CitrixReceiver 3.2启用本地输入法localime报错
查看>>
Linux(CentOS)安装Oracle_11g_r2数据库(二)安装
查看>>
WINDOWS和LINUX的P2V的不同
查看>>
我的友情链接
查看>>
android SharedPreferences使用
查看>>
报表表达式注意事项
查看>>
JAVA反射机制作用是什么
查看>>
对数组中数据的大小排序
查看>>
自定义Checkbox的样式
查看>>