• 用AndroidStudio创建so


    Android开发中经常遇到so,下面介绍用Android Studio创建so。Android Studio版本3.0.1.

    一 编写代码

    1 创建java类myJNI.java,并且声明一个native方法HelloWorld。

      native方法由java声明,由c/c++实现。

      

    
    

    2  编译myJNI.java,生成class文件myJNI.class

      打开命令行工具,cd进入myJNI.java所在的目录,然后用javac myJNI.java命令编译myJNI.java,成功后在myJNI.java目录下生成myJNI.class文件

      

    3 生成.h文件。

      cd到F:CreateSoappsrcmainjava目录,使用javah -jni 包名.类名 命令生成.h文件。示例项目包名com.createso,类名myJNI。成功后会在该目录生成com_createso_myJNI.h文件。

      

    4 创建c代码文件

      在main目录下新建一个jni文件夹,新建一个文件命名为com_createso_myJNI.c,把com_createso_myJNI.h文件里的内容复制到main.c中,并且实现Java_com_createso_myJNI_HelloWorld方法。

       

    二 填写配置

    1 在Android Studio里下载CMake和LLDB,File->Setting->Appearance->System Settings->Android SDK,点击SDK Tools标签页,勾选CMake和LLDB,点击OK开始下载。

    2 在当前工程app的build.gradle的defaultConfig节点中加入:

      // 使用Cmake工具
      externalNativeBuild {
        cmake {
          cppFlags ""
          //生成多个版本的so文件
          abiFilters 'armeabi','armeabi-v7a','x86'
               }

                }

    3 在build.gradle的android节点中,加入:

      //配置CMakeList.txt路径

      externalNativeBuild{

        cmake{

          path "CMakeLists.txt"

           }

                }

    4 添加CMakeLists.txt文件到当前工程app的build.gradle文件同级目录下,CMakeLists.txt内容如下:


      cmake_minimum_required(VERSION 3.4.1)
      add_library( 
      # 设置so文件名称.
      TestSo


      # 设置这个so文件为共享.
      SHARED

      # 指向要编译的c文件.
      src/main/jni/chenxi_com_serialportjni_SerialPort.c)

      find_library(
      log-lib

      # Specifies the name of the NDK library that
      # you want CMake to locate.
      log )

      # Specifies libraries CMake should link to your target library. You
      # can link multiple libraries, such as libraries you define in this
      # build script, prebuilt third-party libraries, or system libraries.

      target_link_libraries( # Specifies the target library.
        # 指定目标库.
        TestSo

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib} )

     三 编译输出SO

      如果项目太大编译一次时间太长,这儿我们只编译创建so的这个模块:Android Studio中点击Build->Make Module "app"

      编译完成后在F:CreateSoappuildintermediatescmakedebugobj路径下生成各个平台的so,生成的so会在指定名字的前面加上lib,即"libTestSo"。

      

  • 相关阅读:
    瓜子IM智能客服系统的数据架构设计(整理自现场演讲)
    正确理解IM长连接的心跳及重连机制,并动手实现(有完整IM源码)
    从游击队到正规军(二):马蜂窝旅游网的IM客户端架构演进和实践总结
    拿起键盘就是干:跟我一起徒手开发一套分布式IM系统
    12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统
    适合新手:从零开发一个IM服务端(基于Netty,有完整源码)
    关于按钮多次点击问题
    UIButton内部子控件自定义布局-“UIEdgeInsets”
    iOS中的数据库应用
    swift中的正则表达式
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10002299.html
Copyright © 2020-2023  润新知