我正在移动我的Android项目,该项目使用ndk-build来使用gradle构建系统,如Android新构建工具的示例中所述.在这个链接http://tools.android.com/tech-docs/new-build-system.我看了页面底部的gradle-samples-0.11获取灵感.
所以我设法通过在build.gradle默认配置部分中包含以下代码来配置我需要的所有部分.
ndk {
moduleName "MyModuleName"
ldLibs "log"
cFlags "-std=c++11 -fexceptions"
stl "gnustl_static"
}
我在原始项目的Application.mk文件中有这一行:
NDK_TOOLCHAIN_VERSION:= 4.9
这是我无法配置的最后一块.
我正在使用NDK修订版10.我需要这个NDK_TOOLCHAIN_VERSION:= 4.9因为我的构建报告错误:(25,11)错误:在’Integer’之前预期的嵌套名称说明符,并且该行的c代码看起来像这样.
using Integer = int16_t;
有没有人知道如何解决这个问题,拜托?
解决方法:
我一直在努力解决这个问题.但最终通过编写自定义任务使Android Studio使用Application.mk和Android.mk就像在eclipse中一样.
我的build.gradle看起来像这样
apply plugin: 'com.android.application'
android {
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
compileSdkVersion 20
buildToolsVersion "20.0.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 20
versionCode 1
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
}
task buildNative(type: Exec) {
def ndkBuild = null;
def ndkBuildingDir = new File("src/main/jni");
def hasNdk = false;
if (System.getenv("NDK_BUILD_CMD") != null) {
hasNdk = true;
ndkBuild = new File(System.getenv("NDK_BUILD_CMD"))
}
commandLine ndkBuild, "--directory", ndkBuildingDir
doFirst {
if (!hasNdk) {
logger.error('##################')
logger.error("NDK build failed!!")
logger.error('Reason: NDK_BUILD_CMD not set.')
logger.error('##################')
}
assert hasNdk: "NDK_BUILD_CMD not set."
}
}
tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn buildNative }
task cleanNative(type: Exec) {
def ndkBuild = null;
def ndkBuildingDir = new File("src/main/jni");
def hasNdk = false;
if (System.getenv("NDK_BUILD_CMD") != null) {
hasNdk = true;
ndkBuild = new File(System.getenv("NDK_BUILD_CMD"))
}
commandLine ndkBuild, "--directory", ndkBuildingDir, "clean"
doFirst {
if (!hasNdk) {
logger.error('##################')
logger.error("NDK build failed!!")
logger.error('Reason: NDK_BUILD_CMD not set.')
logger.error('##################')
}
assert hasNdk: "NDK_BUILD_CMD not set."
}
}
clean.dependsOn 'cleanNative'
为此,您需要设置一个环境变量NDK_BUILD_CMD来设置确切的ndk-build可执行文件.
在Windows上,您只需将环境变量NDK_BUILD_CMD指向ndk-build.exe即可
在Mac上,您在.bash_profile中设置的路径变量在GUI应用程序上无法访问(因此Android Studio将无法读取它们).
因此,将.bash_profile编辑为类似的内容
GRADLE_HOME={path_to_gradle}
ANDROID_SDK_ROOT={path_to_sdk_dir}
ANDROID_HOME=$ANDROID_SDK_ROOT/platform-tools
ANDROID_NDK_HOME={path_to_ndk}
NDK_BUILD_CMD=$ANDROID_NDK_HOME/ndk-build
export PATH=$GRADLE_HOME/bin:$ANDROID_HOME:$ANDROID_SDK_ROOT/tools:$ANDROID_NDK_HOME:/opt/local/bin:/opt/local/sbin:$PATH
launchctl setenv GRADLE_HOME $GRADLE_HOME
launchctl setenv ANDROID_HOME $ANDROID_HOME
launchctl setenv ANDROID_NDK_HOME $ANDROID_NDK_HOME
launchctl setenv NDK_BUILD_CMD $NDK_BUILD_CMD
launchctl行将使您的环境变量在Android Studio中可见.
PS:每次打开终端时都会运行.bash_profile.因此,要使其与Android Studio一起正常运行,您需要启动一次终端,然后运行Android Studio.否则,构建将失败,表示未设置NDK_BUILD_CMD.我没有找到任何方法来设置Mac启动时的值.如果其他人可以找到方法,请随时提出建议.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。