2012-09-28 8 views
16

Wir haben ein ziemlich großes C++ Projekt, das wir plattformübergreifend für Android und iOS bauen. Xcode verwendet alle Kerne beim Kompilieren und ist viel schneller (4-5x je nach Rechner). Gibt es eine Möglichkeit, die abnormale Leistung des NDK zu verbessern? Irgendwelche Multi-CPU-Optionen? Wir haben vorkompilierte Header, aber es scheint mir, es ist die Verwendung von Ressourcen, die den Fehler verursacht.Wie man Android andk baut

So alle Tipps oder Tricks, um Android Build-Zeiten zu beschleunigen Projekt würde sehr geschätzt werden!

Antwort

19

Sie müssen das Build-System von Android nicht für Ihre Kompilierung verwenden. Die Tools sind alle für die Verwendung in einem Makefile verfügbar (Sie müssen jedoch darauf achten, Include-Pfade, Bibliothekspfade und Compileroptionen einzurichten).

Da Sie Ihr eigenes Makefile erstellen können, anstatt die Standard-Build-Skripts zu verwenden, können Sie die Option -jN verwenden, um die Anzahl der gleichzeitig durchzuführenden Operationen anzugeben.

+24

den 'NDK-build' Befehl selbst machen verwendet. Sie könnten einfach 'ndk-build -jN' verwenden. – kennytm

+4

@usman das N ist nicht wörtlich, Sie müssen dort eine Zahl platzieren, die basierend auf der Anzahl der CPU-Kerne auf Ihrem Build-System ausgewählt wird. Beispiel: -j4 – mah

+0

@kennyTM Ich habe j2. Derselbe Befehl baut Dinge viel schneller auf dem System meines Freundes – usman

1

folgendes Fragment von bulid.gradle zeigt ein Beispiel für -jN und abifilters: (siehe http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ExternalNativeNdkBuildOptions.html und https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.NdkOptions.html)

android { 
compileSdkVersion 21 
buildToolsVersion '25.0.3' 

defaultConfig { 
    applicationId "test" 
    minSdkVersion 21 
    targetSdkVersion 21 

    ndk { 
     moduleName "native_lib" 
     abiFilters 'armeabi-v7a', 'arm64-v8a' 
    } 
    externalNativeBuild { 
     ndkBuild { 
      arguments '-j4' 
     } 
    } 
    jackOptions { 
     enabled true 
    } 
}.....