我从here下载了sipdroid项目,并尝试在Android Studio中导入。在构建错误时:
错误:当前插件中不推荐使用NDK集成。考虑尝试新的实验插件。有关详细信息,请参阅http://tools.android.com/tech-docs/new-build-system/gradle-experimental。在gradle.properties中设置“android.useDeprecatedNdk = true”以继续使用当前的NDK集成。
我创建了名为gradle.properties
的文件,并添加了android.useDeprecatedNdk=true
然后在构建时我遇到包含libs的错误,例如:
#include <myinttypes.h>
#include <spandsp/telephony.h>
#include <spandsp/g722.h>
#include <spandsp/private/g722.h>
还有一个错误:
错误:任务':app:compileDebugNdk'执行失败 com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'命令'C:\ Users .... \ ndk-bundle \ ndk-build.cmd''以非完成零退出值2
怎么了?如何在没有这个错误的情况下构建项目?
答案 0 :(得分:2)
首先,您始终可以使用命令行构建jni-part,这样做:
android.useDeprecatedNdk=true
并使用
创建gradle.properties文件apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.0.1"
defaultConfig {
applicationId "org.sipdroid.sipua"
minSdkVersion 5
targetSdkVersion 21
ndk {
moduleName "OSNetworkSystem"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
sourceSets.main.jni.srcDirs = [] // disable automatic ndk-build call, which ignore our Android.mk
sourceSets.main.jniLibs.srcDir 'src/main/libs'
}
项目的根源。
使用新的 build.gradle (模块:应用)将是:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 21
buildToolsVersion = "21.0.1"
defaultConfig.with {
applicationId = "org.sipdroid.sipua"
minSdkVersion.apiLevel = 10
targetSdkVersion.apiLevel = 21
}
}
compileOptions.with {
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
/*
* native build settings
*/
android.ndk {
moduleName = "OSNetworkSystem"
/*
* Other ndk flags configurable here are
* cppFlags.add("-fno-rtti")
* cppFlags.add("-fno-exceptions")
* ldLibs.addAll(["android", "log"])
* stl = "system"
*/
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.txt'))
}
}
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
create("x86-64") {
ndk.abiFilters.add("x86_64")
}
create("mips") {
ndk.abiFilters.add("mips")
}
create("mips-64") {
ndk.abiFilters.add("mips64")
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
它适用于我。
通常我会使用Experimental Android Gradle Plugin,它对本机项目来说要好得多。将 sipdroid 导入Android Studio后,您需要将 build.gradle (模块:应用)更改为:
'com.android.tools.build:gradle:1.5.0'
并从
更改build.gradle(整个项目,根目录)中的类路径'com.android.tools.build:gradle-experimental:0.4.0'
到
#include "SKP_Silk_typedef.h"
并在项目的根目录中删除带有'android.useDeprecatedNdk = true'的gradle.properties文件。
构建完成后,Android Studio将消除 Gradle Build Messages 包含来源的大量错误,并通过点击相应的消息找到它们。
我没有看到使用Experimental Android Gradle Plugin的任何其他变体,而不是像这样更改cpp和c文件中的包含:
例如在 ndk / silk / src / SKP_Silk_main_FIX.h :
#include "../interface/SKP_Silk_typedef.h"
到
android.sources {
main {
jni {
source {
srcDirs = []
}
}
}
}
很遗憾这个片段与Gradle Experimental Plugin同步,但没有效果。
android.sources{
main.jni {
source {
srcDirs = []
}
}
main.jniLibs {
source {
srcDirs = ['src/main/libs']
}
}
}
有解决方案来自 How to use custom Android.mk with new gradle build system
BError:Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'model.android.sources'
插件 gradle-experimental中的 bug :0.4.0 会抛出此错误
{{1}}
但 gradle-experimental:0.3.0-alpha7 如果删除 jni 并且仅保存 libs 目录,则可正常工作。