本项目需要安装android studio 以及设定相应环境变量,请查看上一个博客。

1.新建New ->New Project 选择Empty Activity 点击Next 。       

2.项目名为T613_IIC(根据个人项目,设定名称) 。 

 3.点击app 框,选择虚拟设备,虚拟设备出现helloworld 说明运行正常,否则环境没有设定好,重新检查设定。 

  4.为了产生.so库,先新建一个含有Native 方法的Java类。

     1)右击com.examples.t613_iic->New->Java ,新建t613_correction.java文件。

     2)在文件中,添加Native 方法,T613_algorithm就是要加载的.so 库名称。

     3)点击MainActivity ,调用Native 方法。

package com.example.t613_iic;public class t613_correction {    // 动态导入 so 库    static {        System.loadLibrary("T613_algorithm");    }    //创建一个 native 方法    public native static String get();}
package com.example.t613_iic;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.e("Message",t613_correction.get());    }}

 

 5.点击Make Project 会在路径:

T613_IIC\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes\com\example\t613_iic 下产生

t613_correction.class文件。

  6.生成JNI 的.h头文件。

 1)点击studio 底部的Terminal 进入终端,切入到main 目录下。

 2)执行

javac  -encoding  utf8  -h .\jni E:\Lightning2\android\app\T613_IIC\app\src\main\java\com\example\t613_iic\

t613_correction.java  命令,该命令表示在当前目录下生成jni 文件夹,并且产生 t613_correction.java的本地库的头文件。

3)在路径 T613_IIC\app\src\main\jni 下可以看到com_example_t613_iic_t613_correction.h头文件。

/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class com_example_t613_iic_t613_correction */#ifndef _Included_com_example_t613_iic_t613_correction#define _Included_com_example_t613_iic_t613_correction#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_t613_iic_t613_correction * Method:    get * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_t613_1iic_t613_1correction_get  (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif

 

  7.新建auto_correction.c 库文件

1)右击jni->New->C/C++ Source File 。

2).c内容包含步骤 6 中产生的头文件,并且将头文件中Native 方法放入其中(从这里面大家应该能看到我们要封装成.so的C库    函数名和我们步骤 4 中创建的Native 方法的名称已经联系起来了,这就是JNI 的作用,将java 和c/c++ 建立一种转换机制)。

//// Created by terawins on 2019/7/5.//#include#include//导入我们创建的头文件#include "com_example_t613_iic_t613_correction.h"JNIEXPORT jstring JNICALL Java_com_example_t613_1iic_t613_1correction_get  (JNIEnv *env, jclass jclass){      //返回一个字符串      return (*env)->NewStringUTF(env,"This is my first NDK Application,my name is navy");  }

 

  8.新建Android.mk文件

     1)右击jni->New->File 。

      2)为auto_correction.c 编写.mk文件。

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := T613_algorithmLOCAL_LDFLAGS := -Wl,--build-idLOCAL_SRC_FILES := E:\Lightning2\android\app\T613_IIC\app\src\main\jni\auto_correction.cLOCAL_C_INCLUDES += E:\Lightning2\android\app\T613_IIC\app\src\debug\jniLOCAL_C_INCLUDES += E:\Lightning2\android\app\T613_IIC\app\src\main\jniinclude $(BUILD_SHARED_LIBRARY)

  9.修改build.gradle 自动生成.so库 (该步骤也可以通过Terminal 下在jni 目录使用ndk-build 命令手动生成.so库,不再详述)

      1)点击build.gradle 增加ndk 编译命令 。

      2)右击Android.mk->Link C++ Project with Gradle ,弹出Link C++ Project with Gradle 对话框,选择ndk-build以及Android.mk 路径,点击OK ,将会在build.gradle中生成 externalNativeBuild 代码段。

        ndk{            moduleName "T613_algorithm"         //生成的so名字            abiFilters "armeabi-v7a", "x86"     //不同体系架构下的so库。        }
    externalNativeBuild {        ndkBuild {            path file('src/main/jni/Android.mk')        }    }

 

  10.点击点击app 框,将看到.so库中的This is my first NDK Application,my name is navy 这句话被打印,运行虚拟机,可以看           到  T613_IIC 已运行。

11. 在目录:E:\Lightning2\android\app\T613_IIC\app\build\intermediates\ndkBuild\debug\obj\local\armeabi-v7a 和

E:\Lightning2\android\app\T613_IIC\app\build\intermediates\ndkBuild\debug\obj\local\x86 下查看不同架构使用的.so库。

 

注意事项:(1)t613_correction.c 加载的库的名称T613_algorithm和build.gradle 中ndk 代码段中生成.so库名称T613_algorithm以及 Android.mk 中LOCAL_MODULE := T613_algorithm 名称要一致。

 

 

 

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)使用JNI的相关
  6. Binder 浅出深入 -- 你真的会用 binder?
  7. Android实现手机游戏隐藏虚拟按键
  8. Android(安卓)activity简单的跳转
  9. Android(安卓)如何优雅的hook私有方法

随机推荐

  1. Android(安卓)TextView走马灯效果
  2. android https之一
  3. android目录结构
  4. Android菜单详解(一)——理解android中的Me
  5. android https之一
  6. Android菜单详解(一)——理解android中的Me
  7. Android(安卓)SDK Android(安卓)Studio A
  8. Android(安卓)Studio for mac开发错误
  9. Android(安卓)ScrollView去掉滚动条及Scr
  10. android - seekbar 宽度全屏的坑