Eu configurei sdk.dir
e ndk.dir
entre local.properties
.
Como leio os valores definidos no sdk.dir
e ndk.dir
no build.gradle
arquivo?
android
android-gradle-plugin
Vikram
fonte
fonte
local.properties
esteja em uso para a configuração local do próprio Android Studio, e ter outro arquivo com o mesmo nome pode criar um pouco de confusão. Consulte stackoverflow.com/a/49306091/1587329 abaixoandroid.getSdkDirectory()
simplesmente funciona.Respostas:
Você pode fazer isso desta forma:
Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def sdkDir = properties.getProperty('sdk.dir') def ndkDir = properties.getProperty('ndk.dir')
Use
project.rootProject
se estiver lendo o arquivo de propriedades em um subprojetobuild.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
Caso o arquivo de propriedades esteja no mesmo diretório do subprojeto, você pode usar apenas
project
.fonte
build.gradle
arquivoproject
está uma variável que se refere ao projeto atual. Se você tiver erros estranhos, faça uma nova pergunta.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", "") }
e no código você o obtém como outra string de Recursos -
resources.getString(R.string.default_account_iccid);
fonte
Embora a resposta de @rciovati esteja certamente correta, também existe uma maneira alternativa de ler os valores de
sdk.dir
endk.dir
.Conforme apontado nesta entrada de blog por Gaku Ueda (Obtendo o diretório ndk), a
BasePlugin
classe oferece métodos paragetNdkFolder()
egetSdkFolder()
:def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder() def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder()
Nota: pode ser necessário alterar
com.android.application
paracom.android.library
se você estiver construindo uma bibliotecaEsta é talvez uma forma mais elegante de ler os valores da pasta. Embora deva ser dito que a resposta fornecida por @rciovati é mais flexível, pois é possível ler qualquer valor no arquivo de propriedades.
fonte
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
como pode ser visto aqui: stackoverflow.com/questions/28615439/…A resposta que carrega local.properties manualmente acima obviamente funciona, e a próxima que requer que você saiba qual plugin foi aplicado deve funcionar também.
Essas abordagens podem ser um pouco melhores para alguns, já que são mais genéricas, pois funcionam independentemente de você estar usando o plugin de aplicativo, teste ou biblioteca. Esses snippets também fornecem acesso programático completo a todas as configurações do plug-in do Android (sabores do produto, versão das ferramentas de construção e muito mais):
Se você precisar acessar um arquivo build.gradle que está usando o plug-in do Android para Gradle, basta acessar o DSL do Android diretamente, pois agora está disponível diretamente:
project.android.sdkDirectory
A forma mais longa (abaixo) disso é útil se você estiver criando classes personalizadas de Tarefas do Gradle ou plug-ins ou simplesmente quiser ver quais propriedades estão disponíveis.
// 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}");
No momento desta postagem, há também uma
adbExe
propriedade útil que definitivamente vale a pena observar.Este código deve ser executado APÓS o plug-in do Android Gradle ser configurado de acordo com o ciclo de vida do Gradle. Normalmente, isso significa que você o coloca no
execute
método de aTask
ou DEPOIS daandroid
declaração DSL em umbuild.gradle
arquivo de aplicativo / bibliotecas Android ).Esses snippets também vêm com a ressalva de que, conforme você atualiza as versões do plug-in do Android Gradle, essas propriedades podem mudar conforme o plug-in é desenvolvido, portanto, basta testar ao mover entre as versões do Gradle e do plug-in do Android Gradle, bem como do Android Studio (às vezes, uma nova versão do Android O Studio requer uma nova versão do plug-in do Android Gradle).
fonte
Acho que é uma forma mais elegante.
println "${android.getSdkDirectory().getAbsolutePath()}"
ele funciona no Android Gradle 1.5.0.
fonte
Adicionando a propriedade
A técnica do Gradle a seguir mostra como armazenar uma propriedade em seu arquivo local.properties para que ela possa ser referenciada com segurança por seu aplicativo.
local.properties
sua nível de projeto diretório, e depois adicionar o seu imóvel como exemplo a seguir:sdk.dir=MY_SDK_DIR
build.gradle
arquivo de nível de aplicativo , adicione este código aodefaultConfig
elemento. Isso permite que o Android Studio leia asdk.dir
propriedade dolocal.properties
arquivo no momento da compilação e injete a variável de compilação em seures/gradleResVlues.xml
.Properties properties = new Properties() if (rootProject.file("local.properties").exists()) { properties.load(rootProject.file("local.properties").newDataInputStream()) } resValue "string", "sdk_dir", properties.getProperty("sdk.dir", "")
getString(R.string.sdk_dir);
fonte