2015-11-21 5 views
0

Я загрузил проект sipdroid от here и попытался импортировать его в Android Studio. Строя ошибка:Как построить sipdroid в Android Studio?

Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental . Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.`

Я создал файл с именем gradle.properties и добавил android.useDeprecatedNdk=true

Тогда при построении у меня были ошибки с включая LIBS, например:

#include <myinttypes.h>
#include <spandsp/telephony.h>
#include <spandsp/g722.h>
#include <spandsp/private/g722.h>

И еще одна ошибка:

Error:Execution failed for task ':app:compileDebugNdk'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users....\ndk-bundle\ndk-build.cmd'' finished with non-zero exit value 2

Что случилось? Как построить проект без этих ошибок?

+0

Если вы хотите использовать сложную программу, вам, вероятно, придется либо следовать существующему процессу сборки, используемому ее разработчиками, либо инвестировать много времени в создание новой, которая начинается с понимания существующей. Вы не можете просто слепо импортировать такие проекты в среду IDE и ожидать, что они будут построены. –

ответ

2

Во-первых, вы всегда можете построить 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.

+0

Почему бы не использовать 'cppFlags.add (" - I ../ interface ")'? –

+0

Это хорошая идея, мы можем добавить эти флаги для всех каталогов из Android.mk. – AWalkmen

Смежные вопросы