2014-02-24 11 views

Antwort

102

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.

+3

Was ist "project.rootProject"? – AlexBalo

+0

Eine kurze Erklärung hinzugefügt – rciovati

+0

Was meinst du mit Projekt? Meine Idee gibt mir einen Fehler. Wie bekomme ich den Projektpfad? – AlexBalo

10

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.

+1

in Gradle 1.1.0 nicht. – Simas

+1

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

+1

Gebrochen wieder mit der Umstellung auf "experimentelle" Plugin :( –

7

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).

3

Ich denke, es ist eleganter Weg.

println "${android.getSdkDirectory().getAbsolutePath()}" 

es funktioniert auf Android Gradle 1.5.0.

3

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); 
Verwandte Themen