2012-09-28 2 views
16

Abbiamo un progetto C++ piuttosto grande che costruiamo piattaforme incrociate per Android e iOS. Xcode usa tutti i core durante la compilazione ed è molto più veloce (4-5x a seconda della macchina). C'è un modo per migliorare le prestazioni di disagio del NDK? Qualche opzione multi CPU? Abbiamo intestazioni precompilate, ma mi sembra che sia l'uso di risorse che è in difetto.Come accelerare le build su Android ndk

Quindi qualsiasi suggerimento o trucchetto per accelerare i tempi di costruzione del progetto Android ndk sarebbe molto apprezzato!

risposta

19

Non è necessario utilizzare il sistema di build di Android per la compilation; gli strumenti sono tutti disponibili per l'uso all'interno di un Makefile (anche se dovrai fare attenzione a impostare percorsi di inclusione, percorsi di libreria e opzioni del compilatore).

Poiché è possibile creare il proprio Makefile anziché utilizzare gli script di generazione predefiniti, è possibile utilizzare l'opzione -jN per specificare il numero di operazioni simultanee da eseguire.

+24

Il comando 'NDK-build' si sta usando fare. Potresti semplicemente usare 'ndk-build -jN'. – kennytm

+4

@usman il N non è letterale, è necessario inserire un numero lì, scelto in base al numero di core CPU sul sistema di generazione. Esempio: -j4 – mah

+0

@kennyTM ho fatto j2. Lo stesso comando costruisce le cose molto più velocemente sul sistema del mio amico – usman

1

seguente frammento di bulid.gradle mostra un esempio di -jn e abifilters: (vedi http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ExternalNativeNdkBuildOptions.html e 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 
    } 
}.....