2017-05-17 3 views
4

Ich brauche eine separate CMakeLists.txt für jedes Android ABI. Ich habe versucht, Produktaroma zu verwenden, um den Pfad für CMakeLists.txt festzulegen. Aber ich bekomme folgenden Fehler bei der Ausführung ./gradlew assembleDebug oder einem anderen Großbuchstaben Befehl von der Kommandozeile.Wie setzt man den CmakeLists-Pfad im Produkt-Flavor für jedes Android ABI?

kann nicht Methode Pfad() für Argumente [CMakeLists.txt] auf Objekt vom Typ com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions finden.

Hier ist, wie ich Produktaroma in build.gradle gesetzt habe.

productFlavors { 
    arm64_v8a { 
     ndk { 
      abiFilters "arm64-v8a" 
     } 
     externalNativeBuild { 
      cmake { 
       path "CMakeLists.txt" 
      } 
     } 
    } 
    x86_64 { 
     ndk { 
      abiFilters "x86_64" 
     } 
     externalNativeBuild { 
      cmake { 
       path "CMakeLists.txt" 
      } 
     } 
    } 
} 

HINWEIS - Ich hatte zunächst die Dateien als "CMakeLists_arm64-v8a.txt" genannt und "CMakeLists_x86_64.txt". Aber das scheiterte so, versuchte den gleichen Namen.

Wie behebt man das oder gibt es eine Abhilfe?

+0

Hallo, haben Sie irgendeine Lösung dafür gefunden? – Ancee

Antwort

2

Nein, kann man nicht hat CMakeLists.txt Pfade für verschiedene Aromen und/oder Abi, aber Sie können die Argumente verwenden, um conditionals in Ihrem Cmake Skript hinzufügen, zum Beispiel wie folgt aus:

flavorDimensions "abi" 
productFlavors { 
    arm64_v8a { 
     dimension "abi" 
     ndk { 
      abiFilters "arm64-v8a" 
     } 
     externalNativeBuild { 
      cmake { 
       parameters "-DFLAVOR=ARM" 
      } 
     } 
    } 
    x86_64 { 
     dimension "abi" 
     ndk { 
      abiFilters "x86_64" 
     } 
     externalNativeBuild { 
      cmake { 
       parameters "-DFLAVOR=ARM" 
      } 
     } 
    } 
} 

Jetzt können Sie überprüfen, dies in Ihrem CMakeLists.txt:

if (FLAVOR STREQUAL 'ARM') 
    include(arm.cmake) 
endif() 

Aber in Ihrem Fall, können Sie auf das Argument stützen, die von Android Studio definiert ist und keine eigenen Parameter benötigen:

if (ANDROID_ABI STREQUAL 'arm64-v8a') 
    include(arm.cmake) 
endif() 

Eigentlich brauchen Sie vermutlich nicht getrennt productFlavor s überhaupt, sondern verwenden spalten dünn APKs für jedes ABI zu produzieren.

Verwandte Themen