Ich habe gesetzt sdk.dir
und ndk.dir
in local.properties
.
Wie lese ich die in sdk.dir
und ndk.dir
in der build.gradle
Datei definierten Werte ?
android
android-gradle-plugin
Vikram
quelle
quelle
local.properties
es für die lokale Konfiguration von Android Studio verwendet wird und eine andere Datei mit demselben Namen ein wenig Verwirrung stiftet . Siehe stackoverflow.com/a/49306091/1587329 untenandroid.getSdkDirectory()
funktioniert einfach.Antworten:
Sie können dies folgendermaßen tun:
Verwenden
project.rootProject
Sie diese Option, wenn Sie die Eigenschaftendatei in einem Unterprojekt lesenbuild.gradle
:Wenn sich die Eigenschaftendatei im selben Unterprojektverzeichnis befindet, können Sie nur verwenden
project
.quelle
build.gradle
Dateiproject
befindet sich eine Variable, die sich auf das aktuelle Projekt bezieht. Wenn Sie seltsame Fehler haben, stellen Sie eine neue Frage.local.properties
build.gradle -
und im Code erhalten Sie es als andere Zeichenfolge von Resources -
quelle
Obwohl die Antwort von @ rciovati sicherlich richtig ist, gibt es auch eine alternative Möglichkeit, die Werte für
sdk.dir
und zu lesenndk.dir
.Wie in diesem Blogeintrag von Gaku Ueda (Getting ndk directory) ausgeführt
BasePlugin
, bietet die Klasse Methoden fürgetNdkFolder()
undgetSdkFolder()
:Hinweis: Möglicherweise müssen Sie zu ändern
com.android.application
,com.android.library
wenn Sie eine Bibliothek erstellenDies ist möglicherweise eine elegantere Methode zum Lesen der Ordnerwerte. Obwohl gesagt werden muss, dass die Antwort von @rciovati flexibler ist, da man jeden Wert in der Eigenschaftendatei lesen kann.
quelle
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
wie hier zu sehen ist: stackoverflow.com/questions/28615439/…Die Antwort, die local.properties oben manuell lädt, funktioniert offensichtlich, und die nächste, bei der Sie wissen müssen, welches Plugin angewendet wurde, sollte ebenfalls funktionieren.
Diese Ansätze sind für einige möglicherweise etwas besser, da sie allgemeiner sind, da sie unabhängig davon funktionieren, ob Sie das Anwendungs-, Test- oder Bibliotheks-Plugin verwenden. Mit diesen Snippets erhalten Sie außerdem vollen programmgesteuerten Zugriff auf alle Android-Plugin-Konfigurationen (Product Flavours, Build Tools-Version und vieles mehr):
Wenn Sie Zugriff auf eine build.gradle-Datei benötigen, die das Android Gradle Plugin verwendet, greifen Sie einfach direkt auf Android DSL zu, da es jetzt direkt verfügbar ist:
Die längere Form (unten) ist praktisch, wenn Sie benutzerdefinierte Gradle Tasks-Klassen oder Plugins erstellen oder einfach nur anzeigen möchten, welche Eigenschaften verfügbar sind.
Zum Zeitpunkt dieser Veröffentlichung gibt es auch eine praktische
adbExe
Eigenschaft, die definitiv erwähnenswert ist.Dieser Code muss ausgeführt werden, nachdem das Android Gradle Plugin für den Gradle Livecycle konfiguriert wurde. In der Regel bedeutet dies, dass Sie es in die
execute
Methode von aTask
einfügen oder NACH derandroid
DSL-Deklaration in eine Android-App / Bibliotheksdateibuild.gradle
einfügen.Diese Snippets enthalten auch die Einschränkung, dass sich diese Eigenschaften beim Aktualisieren der Android Gradle Plugin-Versionen ändern können, wenn das Plugin entwickelt wird. Testen Sie also einfach, wenn Sie zwischen Versionen des Gradle- und Android Gradle-Plugins sowie Android Studio (manchmal eine neue Version von Android) wechseln Studio benötigt eine neue Version des Android Gradle Plugins.
quelle
Ich denke, es ist eleganter.
es funktioniert auf Android Gradle 1.5.0.
quelle
Sie können es sich noch einmal überlegen, ob Sie Werte manuell festlegen möchten,
local.properties
da diese bereits von Android Studio (für das Root-Projekt) verwendet werdenBeachten Sie jedoch die in den Kommentaren aufgeführte spezifische Ausnahme für cmake.
quelle
android.getSdkDirectory()
local.properties
ist ebenfalls legitim. Siehe developer.android.com/studio/projects/… : Google empfiehlt das Hinzufügencmake.dir="path-to-cmake"
, um das Standard-Suchverhalten zu überschreiben.If you set this property, Gradle no longer uses PATH to find CMake.
. Wie sehen Sie das? Empfehlen Sie die Verwendung oder erwähnen Sie einfach, dass es in einigen Fällen geändert werden kann? Das heißt: Dies sollte NICHT wie in RFC2119 sein : Versuchen Sie es so, es sei denn, es gibt gute Gründe?cmake.dir
zu local.properties , nicht irgendein Vorbehalt oder Nebeneffekt, etwas Gefährliches zu tun. Ich bin es nicht, sondern Google, der die Verwendung empfiehlt, wenn es einen guten Grund gibt (dh wenn Sie nicht möchten, dass Gradle PATH verwendet, um CMake zu finden).