• NDK环境配置


    Android Studio 配置

    (不是SDK,麻烦各位看官看清楚)

    • 手动配置

      • 步骤一:下载sdk 下载方式有两种

        • 一官方下载(请科学上网)

          这里写图片描述

        • 二在studio中下载(如下载慢”拿梯子翻墙”)
          这里写图片描述
          选择NDK和LLDB 2.2 (调试工具,不下载也可开发 只是很难受,连源码都关联不了)

      • 步骤二:设置NDK的环境变量
        假设你下载的NDK路径如下F:android-ndk-r12b
        如下这里写图片描述
        那么我们

        • 如图
          这里写图片描述
        • 下一步
          这里写图片描述
        • 继续 选择环境变量
          这里写图片描述
        • 弹出的的菜单中
          这里写图片描述
      • 最后 粘贴路径(记得加冒号)确定后返回上一个界面继续点击确定应用即可

    • 步骤三:在工程目录src/main/jni新建c文件Android.mk 和 Application.mk

      • Android.mk:建立目标编译生成的类库名
      LOCAL_PATH := $(call my-dir) 
      
      include $(CLEAR_VARS)
      
      LOCAL_MODULE    := hello   # 生成的静态链接库或动态链接库的名字, linux 下生成 libhello.so
      LOCAL_SRC_FILES := hello-jni.c # 所有的源文件,空格隔开
      
      include $(BUILD_SHARED_LIBRARY) # 生成动态链接库
      • Application.mk
       APP_ABI := all   # 生成所有CPU架构下的库,如果没有 Application.mk 默认只会生成 arm 架构下的库
      • hello-jni.c (javah 命令获取头–要在某个类包文件根目录前打开命令控制输入ndk-build)
        我们先看看源码:
      package com.example.administrator.myapplication;
      
      import android.provider.Settings;
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      
      public class MainActivity extends AppCompatActivity {
      
          static {
              System.loadLibrary("hello");
          }
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          }
          public native int stringFromJNI();
      }
      
      • 如 某个类的包:com.example.administrator.myapplication
        那么我们要在com父目录下按下shift建 右键 在跳出选项窗口选择
        这里写图片描述

      • 在控制输入ndk-build包目录+类如com.example.administrator.myapplication.MainActivity
        这里写图片描述

      • 之后会在包根目录的上级目录生成 包二级包三级包_类名.h文件

      这里写图片描述

    这里写图片描述

    最后将得到头文件写入C文件的函数
    
    
        #include <jni.h>
    
        jstring Java_com_example_lesliefang_myapplication_MainActivity_stringFromJNI(JNIEnv *env,
                                                                                     jobject thiz) {
            return (*env)->NewStringUTF(env, "Hello from JNI !  ");
        }
    目录结果图 
    

    这里写图片描述

    • 步骤四:build.gradle 中添加如下配置
    android {
    
        sourceSets{
            main{
                jni.srcDirs = [] // 阻止 gradle 自己生成 Android.mk 文件,因为我们自己写了
                jniLibs.srcDir 'src/main/libs' // 打包时从这里拿 .so 文件
            }
        }
    }

    这里写图片描述

    • 切换到 src/main/jni 目录下执行 ndk-build 就在 libs 下生成了各个平台的库文件
      这里写图片描述

    最后运行即可 (注意自己生成的so库和手机处理器要对应 X86 x64 ,arm,mips)


    • 自动配置(让studio自己编译so类库)
      需要下载了studio 的LLDB上面下载的时候提过

      • 步骤一 在project Structure中配置SDK目录
        这里写图片描述
        这里写图片描述

      • 这跟直接在 local.properties 写是一样的

      ndk.dir=/Users/lesliefang/leslie/android/android-ndk-r10e
      sdk.dir=/Users/lesliefang/leslie/android/android-sdk-macosx
      • 步骤二:build.gradle 中添加一个配置
        这里写图片描述

    现在目录结构是这样的, Android.mk 和 Application.mk 都不要了直接在jni写C代码(头名字获取上描述一致)
    这里写图片描述

    • 不过这里可能运行时可能会出现错误
    • 如下

      这里写图片描述

      • 解决方法:
        gradle.properties文件末尾写上android.useDeprecatedNdk=true

      这里写图片描述


    Elipse配置DNK

    • 手动配置

      • 跟Studio比较 少了一步骤四 步骤四:build.gradle 配置
    • 自动配置

      • 步骤一: 配置NDK路径 在Window的preference中Android-ndk
        这里写图片描述
      • 步骤二:在某个安卓项目右键Android Tools 在选择Add Android Native support 然后输入要生成的类库名

      这里写图片描述

    这里写图片描述

    完成后自动在创建jni文件夹并创建一个 类库名.cpp 和一个Android.mk
    当然你想自己控制生成某个处理器C语言 那么再建立一个Application.mk 不写只生产arm (studio默认全部生成三种)
    这里写图片描述

    • 步骤三 添加jni.h头文件
      这里写图片描述

    在跳出的菜单中选择C/C++general选择path and Symbols 在右侧选择add 选择 SDK目录下的platforms/android-xx/arch-arm(你自己选择)/include

    这里写图片描述

  • 相关阅读:
    互联网资源获取
    Linux tomcat安装
    Linux JDK安装
    Linux入门教程
    windows命令行 查看文件树结构
    Gitea搭建及使用
    Jenkins搭建及使用
    Linux 基础环境搭建
    SpringBoot
    JSON Web Token(JWT)学习
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152228.html
Copyright © 2020-2023  润新知