2016-04-21 1 views
1

Ich portiere jetzt C++ Bibliothek auf Android. Ich habe bereits erste Arbeit gemacht und habe es in Application.mk/Android.mk Weg gebaut.Wie erstellt man externe C++ - Bibliothek mit Android Studio + Gradle + NDK?

Die kommende Java-Demo-Anwendung für die Bibliothek wird jetzt im Android Studio entwickelt. Ich kann alles zusammen bauen (Demo + Bibliothek) - dank der StackOverflow Community.

Allerdings habe ich keinen Zugriff auf natives Debugging in diesen Builds. Aber Debugging ist notwendig - Bibliothek ist noch nicht stabil genug. Reines Konsolen-GDB-Debugging braucht zu viel Zeit und kann in Zukunft mehr Stunden beanspruchen.

Also habe ich beschlossen, Build mit Android Studio und Gradle zu integrierten Debugger zu machen.

Ich habe Bibliotheksmodul mit NDK und Java (Wrapper) Teile gewidmet. C/C++ - Quelldateien befinden sich jedoch nicht im Unterverzeichnis jni /. Sie befinden sich in einem anderen Verzeichnis.

Daher kann ich Gradle konfigurieren Quellen aus diesem Verzeichnis zu erhalten. Ich habe versucht, smth wie folgt aus:

apply plugin: 'com.android.model.library' 

model { 
android { 
    compileSdkVersion = 23 
    buildToolsVersion = "23.0.2" 

    defaultConfig.with { 
     minSdkVersion.apiLevel = 10 
     targetSdkVersion.apiLevel = 23 
     versionCode = 1 
     versionName = "1.0" 
    } 

    ndk { 
     moduleName = "inttalksdk" 
     stl "gnustl_shared" 
     cppFlags.add("-std=c++11") 
     cppFlags.add("-fexceptions") 
     ldLibs.addAll(['log']) 
    } 
} 

android.sources { 
    main.jni.source { 
     srcDirs.add(["src"]) 
    } 
} 


android.buildTypes { 
    release { 
     minifyEnabled = false 
     proguardFiles.add(file('proguard-android.txt')) 
    } 
} 
} 

aber nicht Projekt selbst synchronisieren. Fehlermeldung ist:

Gradle 'Android' project refresh failed 
Error:Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'android.sources { ... } @ inttalksdk/build.gradle line 24, column 5' 

Meine wahre Frage ist, wie diese externe C/C++ Dateien in Gradle bauen hinzufügen?

Ich verwende das neueste experimentelle Plugin AS 2.0 + 0.7.0 beta3.

Bitte helfen.

Antwort

1

Problem war in 0.7.0-Beta3 experimentelles Plugin. Ich kehrte zu Version 0.6.0 zurück. Diese Syntax war ok:

android.sources { 
    main { 
     jni { 
      source { 
       srcDir "${project.ext.inttalksdk}/src/Components/Util/" 
      } 
     } 
    } 
+0

Sie auch den C++ Code als Bibliothek hinzufügen könnte, und dann tun 'kompilieren Projekt (': my-jni-Code')' –

+0

Thank you! Aber schließlich wechselte ich zur Unterstützung von CMake - das hat Stunden für mich gespart. – Dmytro