Ich habe sdk.dir und ndk.dir in local.properties festgelegt.Wie lese ich die in local.properties definierten Eigenschaften in build.gradle
Wie lese ich die in sdk.dir und ndk.dir in der Datei build.gradle definierten Werte?
Ich habe sdk.dir und ndk.dir in local.properties festgelegt.Wie lese ich die in local.properties definierten Eigenschaften in build.gradle
Wie lese ich die in sdk.dir und ndk.dir in der Datei build.gradle definierten Werte?
Sie können das tun auf diese Weise:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def sdkDir = properties.getProperty('sdk.dir')
def ndkDir = properties.getProperty('ndk.dir')
Verwenden project.rootProject
, wenn Sie die Eigenschaften lesen in einem Teilprojekt Datei build.gradle
:
.
├── app
│ ├── build.gradle <-- You are reading the local.properties in this gradle build file
│ └── src
├── build.gradle
├── gradle
├── gradlew
├── gradlew.bat
├── settings.gradle
└── local.properties
Falls die Eigenschaftsdatei in das ist dasselbe Unterprojektverzeichnis, das Sie nur project
verwenden können.
Obwohl @ rciovatis Antwort sicherlich korrekt ist, gibt es auch eine alternative Möglichkeit zum Lesen der Werte für sdk.dir
und ndk.dir
.
Wie wies darauf hin, in this blog entry by Gaku Ueda (Erste NDK-Verzeichnis) die BasePlugin
Klasse bietet Methoden für getNdkFolder()
und getSdkFolder()
:
def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder()
Hinweis: Sie haben com.android.application
-com.android.library
zu ändern, wenn Sie eine Bibliothek bauen
Dies ist vielleicht eine elegantere Art, die Ordnerwerte zu lesen. Allerdings muss gesagt werden, dass die Antwort von @rciovati flexibler ist, da jeder Wert in der Eigenschaftendatei gelesen werden kann.
in Gradle 1.1.0 nicht. – Simas
Für Gradle 1.1.0 müssen Sie 'plugins.getPlugin ('com.android.library'). SdkHandler.getNdkFolder()' verwenden, wie hier zu sehen ist: http://stackoverflow.com/questions/28615439/android- gradle-plugin-1-1-0-getndkfolder-nicht-gefunden-mehr-irgendein-ersatz – Stephan
Gebrochen wieder mit der Umstellung auf "experimentelle" Plugin :( –
Die Antwort, die local.properties manuell oben lädt, funktioniert natürlich, und die nächste, die Sie wissen müssen, welches Plugin angewendet wurde, sollte auch funktionieren.
Diese Ansätze können für einige etwas besser sein, da sie generischer sind, da sie unabhängig davon funktionieren, ob Sie das Plug-in "Application", "Test" oder "Library" verwenden. Diese Snippets geben Ihnen auch vollen programmatischen Zugriff auf alle Android-Plugin-Konfiguration (Produkt Flavours, Build Tools Version und vieles mehr):
Wenn Sie Zugriff benötigen in einer build.gradle Datei, die das Android Gradle Plugin einfach verwendet Zugriff auf den Android DSL direkt, da es direkt ab sofort verfügbar ist:
project.android.sdkDirectory
Je länger Formular (unten) dieses praktisch ist, wenn Sie benutzerdefinierte Gradle Aufgaben Klassen oder Plugins Erstellen oder einfach sehen wollen, welche Eigenschaften zur Verfügung stehen.
// def is preferred to prevent having to add a build dependency.
def androidPluginExtension = project.getExtensions().getByName("android");
// List available properties.
androidPluginExtension.properties.each { Object key, Object value ->
logger.info("Extension prop: ${key} ${value}")
}
String sdkDir = androidPluginExtension.getProperties().get("sdkDirectory");
System.out.println("Using sdk dir: ${sdkDir}");
Zum Zeitpunkt dieser Veröffentlichung gibt es auch eine praktische adbExe
Eigenschaft, die die Feststellung, auf jeden Fall wert ist.
Dieser Code muss ausgeführt werden, nachdem das Android Gradle-Plugin für den Gradle-Livezyklus konfiguriert wurde. In der Regel bedeutet dies, dass Sie es in die execute
Methode eines Task
setzen oder es nach der android
DSL-Deklaration in einer build.gradle
Datei einer Android-App/Bibliotheken platzieren.
Diese Snippets kommen mit dem Vorbehalt, dass sich diese Eigenschaften beim Entwickeln von Android Gradle Plugin Versionen ändern können, wenn das Plugin entwickelt wird. Testen Sie einfach zwischen Versionen des Gradle und Android Gradle Plugins sowie Android Studio (manchmal a Neue Version von Android Studio erfordert eine neue Version des Android Gradle Plugins).
Ich denke, es ist eleganter Weg.
println "${android.getSdkDirectory().getAbsolutePath()}"
es funktioniert auf Android Gradle 1.5.0.
local.properties
default.account.iccid=123
build.gradle -
def Properties properties = new Properties()
properties.load(project.rootProject.file("local.properties").newDataInputStream())
defaultConfig {
resValue "string", "default_account_iccid", properties.getProperty("default.account.iccid", "")
}
und in Code, den Sie als andere Zeichenfolge von Ressourcen erhalten -
resources.getString(R.string.default_account_iccid);
die eigentliche Frage ist: warum isn Ist das nicht im android Gradle Plugin integriert?!?!?!?! – Armand