Skip to content

ygx4zh/StudyForJni

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Study For Jni

说明

ndk开发环境, 是android studio编写,编译,运行,调试c/c++代码的一个平台

下载

  • 下载ndk-bundle,

    下载ndk-bubdle的方法很简单, 可以直接在Settings->Android SDK->Android-Tool->勾选NDK->Apply image

  • 配置NDK环境变量 下载后的ndk-bundle在SDK目录下, 例如我的

    SDK目录  E:\develop\AS\sdk\sdk25\sdk
    NDK目录  E:\develop\AS\sdk\sdk25\sdk\ndk-bundle
    

    ndk编译也需要配置到环境变量;

    NDK_HOME:E:\develop\AS\sdk\sdk25\sdk\ndk-bundle
    Path: %NDK_HOME%;
    

Hello NDK

  • module结构

    结构说明:

    • 创建jni文件夹
      存放Android.mk, 编译脚本 
      Application.mk, 指定所要编译的处理类型
      hello.c, c代码
      
    • libs文件夹
      存放so包的libs文件夹, 编译后生成的so包会在这个文件夹里
      
    • obj文件夹
      ndk编译生成临时文件, obj文件夹用于保存这些临时文件
      
    • build.gradle
      需要注意的是, 由于so包在$(module)/libs 目录下, 因此在build.gradle文件中需要配置.so库的路径
      
      在android{}节点内配置
      
      android{
          ...
          sourceSets{
              main{
                  jniLibs.srcDirs(['libs'])
              }
          }
      }
      

    image

  • Android.mk

    Android.mk可以称为是用于描述编译ndk的一种构建文件, 最基础的编写如下

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := hello_jni
    LOCAL_SRC_FILES := hello.c
    include $(BUILD_SHARED_LIBRARY)
    
    # 井号是注释
    LOCAL_PATH, 此变量表示源文件在开发树中的位置。在这里,构建系统提供的宏函数 my-dir 将返回当前目录(包含 Android.mk 文件本身的目录)的路径。
    include $(CLEAR_VARS), CLEAR_VARS 变量指向特殊 GNU Makefile,可为您清除许多 LOCAL_XXX 变量,例如 LOCAL_MODULE、LOCAL_SRC_FILES 和 LOCAL_STATIC_LIBRARIES。 请注意,它不会清除 LOCAL_PATH。此变量必须保留其值,因为系统在单一 GNU Make 执行环境(其中所有变量都是全局的)中解析所有构建控制文件。 在描述每个模块之前,必须声明(重新声明)此变量。
    LOCAL_MODULE 生成后的so文件名字, hello_jni, 生成后是libhello_jni.so
    LOCAL_SRC_FILES 变量必须包含要构建到模块中的 C 和/或 C++ 源文件列表。
    include $(BUILD_SHARED_LIBRARY), 最后一行帮助系统将所有内容连接到一起:X
    
  • Application.mk

    相当于指定编译的平台

    APP_ABI := all
    
    all表示全平台编译
    ps: 现在支持的平台有:
        arm64v8a
        armeabi
        armeabi-v7a
        mips
        mips64
        x86
        x86_64
        
    

jni接口编写

c代码和Java代码请查看hello.c和Test类

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published