如何在 Android Studio 1.3 中配置 NDK 项目

Posted

技术标签:

【中文标题】如何在 Android Studio 1.3 中配置 NDK 项目【英文标题】:How to configure NDK project in Android Studio 1.3 【发布时间】:2015-10-31 14:27:39 【问题描述】:

我一直在尝试按照this 文章和this 文章为 NDk 配置 android Studio。以下是我的 gradle-wrapper.properties 的内容

#Sat Aug 08 09:36:53 IST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip

以下是build.gradle(project)的内容

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript 
    repositories 
        jcenter()
    
    dependencies 
        classpath 'com.android.tools.build:gradle-experimental:0.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    


allprojects 
    repositories 
        jcenter()
    

最后是 build.gradle(module)

apply plugin: 'com.android.model.application'

model 
    android 
        compileSdkVersion = 22
        buildToolsVersion = "23.0.0 rc3"

        defaultConfig.with 
            applicationId = "com.opaxlabs.nativetest"
            minSdkVersion.apiLevel =  15
            targetSdkVersion.apiLevel =  22
            versionCode = 1
            versionName = "1.0"
        
        android.buildTypes 
            release 
                minifyEnabled = false
                proguardFiles += file('proguard-rules.pro')
            
        
    
    android.ndk
        moduleName = "native"
    


dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'

当我尝试同步 gradle 文件时,出现以下错误:

Error:No such property: android for class: com.android.build.gradle.managed.AndroidConfig

local.properties 中定义了以下路径

ndk.dir=/opt/adt-bundle-linux-x86_64-20140702/sdk/ndk-bundle
sdk.dir=/opt/adt-bundle-linux-x86_64-20140702/sdk

所以看起来我错过了一些东西,只是我找不到它。 任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:
NDK Build option

ndk 
  moduleName "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
  cFlags "-std=c++11 -fexceptions" // Add provisions to allow C++11 functionality
  stl "gnustl_shared" // Which STL library to use: gnustl or stlport

【讨论】:

很抱歉投反对票,但您的 gradle 脚本不遵守 Gradle 2.5 语法。请在此处查看原因:tools.android.com/tech-docs/new-build-system/…【参考方案2】:

在您的 build.gradle(module) 中,android.buildTypes 块需要在 android 块之外。所以它应该是这样的:

model 
    android 
        compileSdkVersion = 22
        buildToolsVersion = "23.0.0 rc3"

        defaultConfig.with 
            applicationId = "com.opaxlabs.nativetest"
            minSdkVersion.apiLevel =  15
            targetSdkVersion.apiLevel =  22
            versionCode = 1
            versionName = "1.0"
        
    
    android.buildTypes 
        release 
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        
    
    android.ndk
        moduleName = "native"
    

【讨论】:

对于从 0.2.0 迁移到 0.4.0 的用户注意:+= 不再适用于 0.4.0,请参阅 tools.android.com/tech-docs/new-build-system/…【参考方案3】:

您是否在 Local.property 文件中声明了您的 NDK 路径??

看起来环境路径和 local.properties 文件指向不同的位置:

PATH: C:\Program Files (x86)\Android\android-ndk-r9d

local.properties:C:\Program Files (x86)\Android\android-studio\android-ndk-r9d

确定哪个是正确的。您可以保留 PATH 并删除 local.properties 声明,然后通过控制台尝试此命令:ndk-build -?看看它是否在 PATH 中找到

【讨论】:

从 Android Studio 1.3 起无需声明 NDK Path。现在设置在Project Structure > SDK Location 切勿对 NDK 使用带空格的路径。如果它的路径也有空格,Android SDK 可能会不高兴。

以上是关于如何在 Android Studio 1.3 中配置 NDK 项目的主要内容,如果未能解决你的问题,请参考以下文章

android studio怎么更新android-ndk

Android Studio 1.3RC版 build加速

如何在 Android Studio 上更改布局预览默认设备

使用 Android Studio (1.3 RC) 找不到 ARM64 NDK 本机库

OpenCv with Android studio 1.3+ using new gradle - undefined reference

我们如何配置 Android Studio 以在每次构建时运行它的 Lint?