Во-первых, вы всегда можете построить JNI-часть с командной строки, делая таким образом:
$ export NDK_PROJECT_PATH=/opt/umake/AndroidStudioProjects/Sipdroid/app/src/main
$ /opt/umake/android/android-ndk/ndk-build
и создать gradle.properties файл с
android.useDeprecatedNdk=true
в корне проекта.
И с новым build.gradle (Module: приложение) будет это:
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'
}
Его работает для меня.
Обычно я использую Experimental Android Gradle Plugin, это намного лучше для родных проектов. После импорта Sipdroid в Android Studio вам нужно изменить 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")
}
}
и изменения в build.gradle классам (всего проекта, корневой каталог) от
'com.android.tools.build:gradle:1.5.0'
к
'com.android.tools.build:gradle-experimental:0.4.0'
и удалять gradle.properties файл с 'android.useDeprecatedNdk = true' в корне проекта.
После сборки Android Studio будет устранена с Gradle Build Messages много ошибок в источниках с включенными и найти их, нажав соответствующее сообщение.
Я не вижу никаких других вариантов с экспериментальной Android Gradle плагин, а не к изменению включает в CPP и с-файлов, как это:
Такие, как в NDK/шелк/Src/SKP_Silk_main_FIX.ч:
#include "SKP_Silk_typedef.h"
в
#include "../interface/SKP_Silk_typedef.h"
Это печально, что этот фрагмент синхронизации с Gradle Экспериментальной плагин с благодарностью, но не влияет.
android.sources {
main {
jni {
source {
srcDirs = []
}
}
}
}
Существует решение от How to use custom Android.mk with new gradle build system
android.sources{
main.jni {
source {
srcDirs = []
}
}
main.jniLibs {
source {
srcDirs = ['src/main/libs']
}
}
}
Кажется ошибка в плагин Gradle-экспериментальный: 0.4.0 бросает эту ошибку
BError:Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'model.android.sources'
но градиент-экспериментальный: 0,3-альфа7 работает нормально, если удалить jni и сохранить только libs.
Если вы хотите использовать сложную программу, вам, вероятно, придется либо следовать существующему процессу сборки, используемому ее разработчиками, либо инвестировать много времени в создание новой, которая начинается с понимания существующей. Вы не можете просто слепо импортировать такие проекты в среду IDE и ожидать, что они будут построены. –