在Android Studio中,什么是ndk-build下的CMAKE_VERBOSE_MAKEFILE?

时间:2017-02-01 22:44:31

标签: android android-studio android-ndk ndk-build

我正在尝试将一些现有的基于Android.mk的本机代码推送到新的Android Studio应用中。有一些链接错误给出消息“错误:错误:链接器命令失败,退出代码为1(使用-v查看调用)”。使用CMake时,可以设置变量CMAKE_VERBOSE_MAKEFILE以使其成为默认行为。有没有办法在ndk-build下做类似的事情?尝试在命令行中使用-v或V = 1(不确定哪个最好)在Android Studio上下文中运行ndk-build似乎很尴尬。

编辑:

如下面的回答所述,这应该可以使用“arguments”关键字从Gradle中获得。我对此的解释是这个版本的模块:app build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.adth.jwc.testproj4"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        ndkBuild {
            path "$projectDir/jni/Android.mk"
            arguments "V=1"
       }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}

这会在类型为org.gradle.api.Project的根项目'TestProj4'上生成错误消息“错误:(16,0)找不到方法ndkBuild()的参数[build_95llvy1tc979yxena3spokoe8 $ _run_closure1 $ _closure3 @ 34646897]。 “

我也尝试了一些变体,所有这些变体都会产生基本相同的错误。 build.gradle文件中“arguments”关键字的正确位置是什么?

2 个答案:

答案 0 :(得分:2)

DSL reference开始,您需要将exernalNativeBuild块放在产品flavor或构建类型块中以添加参数,所以

defaultConfig {
    applicationId "com.adth.jwc.testproj4"
    minSdkVersion 16
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
        ndkBuild {
            arguments "V=1"
        }
    }
}

应该有效。令人困惑的是,BaseExtensionandroid块)也可以有externalNativeBuild块,但其ndkBuild属性是NdkBuildOptions对象,只有{ExternalNativeNdkBuildOptions对象1}}属性。风味和构建类型的path块是http://www.timrodman.com/importing-new-customers-email-address-acumatica/个对象,具有ndkBuild等。

答案 1 :(得分:0)

在build.gradle中

ndkBuild { arguments "V=1" },然后使用--info(设置 - >构建,执行,部署 - >编译器 - >命令行选项)运行gradle。

对于命令行ndk-build用法,请运行ndk-build V=1

https://developer.android.com/studio/projects/add-native-code.html#link-gradle