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:\CreateSo\app\src\main\java目录,使用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:\CreateSo\app\build\intermediates\cmake\debug\obj路径下生成各个平台的so,生成的so会在指定名字的前面加上lib,即"libTestSo"。

  

用AndroidStudio创建so的更多相关文章

  1. AndroidStudio创建项目时一直处于building“project name”gradle project info的解决办法

    AndroidStudio创建项目,最后一步finish后,一直长时间处于building“project name”gradle project info,界面就一直停留在如图所示: 谷歌自家的产品 ...

  2. AndroidStudio创建新项目报错

    创建新项目自动执行时报错: Failed to import new Gradle project: failed to find Build Tools revision 17.0.0 Consul ...

  3. androidstudio创建第一个so文件

    前言:之前看安卓软件安全与逆向分析这书,看到ndk开发这节,发现自己连so文件都没编译操作过233,所以就直接上手试试, 感觉挺好玩的,把关键的加密流程都放进so中去实现,这周先写个demo试试,感觉 ...

  4. 如何使用Androidstudio创建一个新项目

    首先打开AS,然后 选择第一个选项Start a new Android Studio project 填写包名和项目名,点击next 选择项目类型,点击next 选择UI类型(都是死丢丢帮你生成的) ...

  5. 首次使用AndroidStudio创建hello world遇到的坑!(Mac系统下)

    第一次用AS,且不说它SDK配置的琐碎,光建立第一个简单的HelloWorld项目的配置包问题就把我卡了一天.这个坑必须记录一下,

  6. AndroidStudio创建jinLibs文件夹

    在文件中的buildTypes节点下添加 sourceSets.main {          jniLibs.srcDir 'libs'      } 如图

  7. 2018.5.18 AndroidStudio创建项目出错

    Android Studio 出现 Gradle's dependency cache may be corrupt 错误分析 Error:Failed to open zip file. Gradl ...

  8. 学android: android-studio从main开始

    android-studio 创建hello world很容易,一路next创建blank activity,再接好手机或者avd(andorid virtual device)就好了.  但是对于我 ...

  9. 使用AndroidStudio编译NDK的方法及错误解决方案

    参考资料: [android ndk]macos环境下Android Studio中利用gradle编译jni模块及配置:http://demo.netfoucs.com/ashqal/article ...

随机推荐

  1. css - bootstrap3下拉菜单点击之后怎么改变背景颜色?

    css添加 .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .n ...

  2. 一对一Socket简单聊天的实现

    今天终于调试通了Socket一对一的聊天,每次发送连接请求后,将用户名发送到Socket中去,然后将用户名和新建的socket存到map中,然后根据用户名来确定接收方是谁,以实现一对一的聊天功能. 上 ...

  3. C#基础篇八构造函数和面向对象思想

    3.关于 对象创建的几个关键词 Dog d1 = new Dog(); Dog d1 叫做 声明变量 new Dog() 叫做 实例化(创建)对象 4.关于对象.方法和 this 的关系 Dog d1 ...

  4. 杂谈:Windows操作系统的介绍与对Win8操作系统市场反响冷淡原因的分析

    Windows操作系统,毫无疑问是操作系统市场上的霸主,也正因为Windows操作系统的诞生让电脑的操作性能变得更加平民化,深的用户的喜爱.至今身边的人也是选择windows操作系统的居多,这篇文章也 ...

  5. jquery获得下拉框值的代码

    jquery获得下拉框值的代码   获取Select :  获取select 选中的 text :  $("#ddlRegType").find("option:sele ...

  6. mysql 根据一张表更新另一张表

    between 是>= and <=,即包含两个边界

  7. 搭建laravel到nginx

    一.laravel的安装 搭建的第一步当然是安装好laravel,这里推介composer安装,由于国内的问题,极其推介使用国内的镜像去搭建,我在终端里本已经设置好常规的https和http之类的FQ ...

  8. Leetcode 763. Partition Labels

    思路:动态规划.对于属于coins的coin,只要知道amount-coin至少需要多少个货币就能表示,那么amount需要的货币数目=amount-coin需要的货币数目+1:如果amount-co ...

  9. 外网配置花生壳动态域名解析实现外网访问本地iis及vs实时调试

    描述:假如已连外网,具备一台路由器的情况下在路由器设置页面配置花生壳动态域名解析,使得外网可以访问到本地iis 托管的web服务,模拟真实环境调试应用程序. 网络运营商ip的动态分配,通常网络提供商给 ...

  10. 快速把项目部署到webLogic上

    weblogic简介BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应 用的Java应用服务器.将Java的动态功能和Java Enterprise标准的安全 ...