004android初级篇之androidStudio ndk开发环境

android studio中编译C/C++源代码

1. 配置ndk.dir

在 local.properties 添加如下配置:

sdk.dir=path_of_android-sdk
ndk.dir=path_of_android-ndk

android studio中有对ndk环境的设置:

【File】->[Project Struct]->Android NDK Location

在如上位置设置ndk的安装位置。

2.Gradle配置NDK模块

参考如下: android { compileSdkVersion 23 buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.frank.smart.smarthome"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk {
            moduleName "SmartSocket"
            ldLibs "log", "z", "m"
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }
    }

ndk还可以配置更多选项,如下:

ndk {  
  moduleName "myEpicGameCode"
  cFlags "-DANDROID_NDK -D_DEBUG DNULL=0"   // Define some macros
  ldLibs "EGL", "GLESv3", "dl", "log"       // Link with these libraries!
  stl "stlport_shared"                      // Use shared stlport library
}

3.添加C/C++源代码

默认情况下,你需要把C/C++源代码放在 [module]/src/main/jni/ 路径下。效果如下图所示: 当然,你也可以自定义源代码路径:

android {

  // .. android settings ..

  sourceSets.main {
      jni.srcDirs 'src/main/source'
  }
}

4.分平台配置编译(可选)

这一步不是必须的,你可以根据需要,对各个平台进行不同的编译配置,可以设置覆盖前面的编译选项(例如 cFlags )。例如你只想编译指定平台的.so,而不是所有的平台。如下:

android {
  // .. android settings ..
  productFlavors {
    x86 {
      ndk {
        abiFilter "x86"
      }
    }
    arm {
      ndk {
        abiFilter "armeabi-v7a"
      }
    }
    mips {
      ndk {
        abiFilter "mips"
      }
    }
  }
} // android

5. 一个编译错误的解决

android studio 根据Gradle配置自动生成Android.mk 位于app\build\intermediates\ndk\debug下 如果只有c/cpp文件,直接这样编译的话,会报错,这应该是android studio 在这种情况自动生成Android.mk 时的一个bug,见编译错误。

Error:Execution failed for task ':nativeactivity:compileDebugNdk'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2

解决方法:

   在jni文件下建一个空的empty.c文件 编译运行即可

如果还运行不了,在当前model的build.gradle下添加

android{

   …………
    sourceSets.main {
        jni.srcDirs = []
    }
}    

参考链接

  1. Android Studio中NDK开发
  2. NDK错误 org.gradle.process.internal.ExecException: Process 'command with non-zero exit value 2

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

在 Golang 项目中使用 Spring Cloud Config Server 管理配置

最近用 Go 写后端写得很开心,写篇比较实用的博客总结下如何通过 Spring Cloud Config Server 管理 Go 程序中的配置。 实现并不复杂...

2164
来自专栏Hadoop实操

Hue中使用Oozie创建Ssh工作流时sudo命令执行失败问题分析

在使用Hue创建Ssh的Oozie工作流,在Shell脚本中执行sudo命令失败,异常如下:

4515
来自专栏张戈的专栏

修改Apache的超时设置,解决长连接请求超时问题

某日,组内后台开发找到我,问我们的 WEB 服务器超时设置是多少。他反馈的问题是,有一个 VLAN 切换任务 cgi 接口经常返回 504 网关超时错误,要我分...

9628
来自专栏一个会写诗的程序员的博客

《Spring Boot极简教程》第17章 Spring Boot集成日志小结

Java日志框架众多,常用的有java.util.logging, log4j, logback,commons-logging等。

1322
来自专栏一个会写诗的程序员的博客

8.7 Spring Boot集成日志小结

Java日志框架众多,常用的有java.util.logging, log4j, logback,commons-logging等。

2901
来自专栏owent

注册表常用键值意义

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel]

1482
来自专栏Android 开发学习

Gradle plugin自定义

1594
来自专栏阿杜的世界

Spring+Velocity+Mybatis整合笔记(step by step)

开发过程中使用的操作系统是OS X,关于软件安装的问题请大家移步高效的Mac环境设置。 本文是我对自己学习过程的一个回顾,应该还有不少问题待改进,例如目录的设...

1161
来自专栏Java成神之路

SpringBoot_03_依赖本地jar

Springboot 打Jar包,Maven完美解决本地Jar包自动打入Springboot Jar包中

893
来自专栏青青天空树

springboot整合websocket(1)

  我们都知道http协议只能浏览器单方面向服务器发起请求获得响应,服务器不能主动向浏览器推送消息。想要实现浏览器的主动推送有两种主流实现方式:

1202

扫码关注云+社区

领取腾讯云代金券