Vik*_*ram 78 android android-gradle-plugin
我已sdk.dir和ndk.dir在local.properties.
如何阅读中定义的值sdk.dir和ndk.dir中build.gradle文件?
rci*_*ati 126
你可以这样做:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def sdkDir = properties.getProperty('sdk.dir')
def ndkDir = properties.getProperty('ndk.dir')
Run Code Online (Sandbox Code Playgroud)
使用project.rootProject,如果你正在阅读的特性在子工程文件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
Run Code Online (Sandbox Code Playgroud)
如果属性文件位于相同的子项目目录中,则可以使用project.
Sat*_*tar 21
现在有了新的谷歌插件就更简单了
1-添加您的财产
sdk_dir="sdk dir"
Run Code Online (Sandbox Code Playgroud)
2-在顶层(项目级别)添加插件(Groovy)
buildscript {
dependencies {
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:1.3.0"
}
}
Run Code Online (Sandbox Code Playgroud)
在你的应用程序 Gradle 中
plugins {
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
Run Code Online (Sandbox Code Playgroud)
3- 构建您的项目 4- 像这样访问它
BuildConfig.sdk_dir
Run Code Online (Sandbox Code Playgroud)
Dmi*_*ijs 17
local.properties
default.account.iccid=123
Run Code Online (Sandbox Code Playgroud)
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", "")
}
Run Code Online (Sandbox Code Playgroud)
在代码中,您从资源中获取其他字符串 -
resources.getString(R.string.default_account_iccid);
Run Code Online (Sandbox Code Playgroud)
sup*_*qua 10
虽然@ rciovati的答案当然是正确的,也有阅读价值的替代方式sdk.dir和ndk.dir.
正如指出的岳田此博客条目(NDK入门目录)的BasePlugin类提供了方法getNdkFolder()和getSdkFolder():
def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder()
Run Code Online (Sandbox Code Playgroud)
注意:如果要构建库com.android.application,com.android.library则可能必须更改为
这可能是一种更优雅的方式来读取文件夹值.虽然必须说@rciovati提供的答案更灵活,因为可以读取属性文件中的任何值.
G. *_*ini 10
以下Gradle技术向您展示了如何在 local.properties 文件中存储属性,以便您的应用程序可以安全地引用它。
local.properties目录中的,然后添加您的属性,如下例所示:sdk.dir=MY_SDK_DIR
Run Code Online (Sandbox Code Playgroud)
build.gradle文件中,将此代码添加到defaultConfig元素中。sdk.dir这允许 Android Studio 在构建时从文件中读取属性local.properties,然后将构建变量注入到您的res/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", "")
Run Code Online (Sandbox Code Playgroud)
getString(R.string.sdk_dir);
Run Code Online (Sandbox Code Playgroud)
这是针对Kotlin DSL (build.gradle.kts) 的:
import java.util.*
// ...
val properties = Properties().apply {
load(rootProject.file("local.properties").reader())
}
val myProp = properties["propName"]
Run Code Online (Sandbox Code Playgroud)
在 Android 项目(已应用该android插件的地方)中,您还可以执行以下操作:
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
// ...
val properties = gradleLocalProperties(rootDir)
val myProp = properties["propName"]
Run Code Online (Sandbox Code Playgroud)
上面手动加载local.properties的答案显然有效,下一个要求你知道应用了哪个插件的应该也可以.
对于某些人来说,这些方法可能会更好一点,因为它们更通用,因为无论您使用的是Application,Test还是Library插件,它们都能正常工作.这些片段还为您提供了对所有Android插件配置(产品风味,构建工具版本等)的完全编程访问:
如果您需要访问使用Android Gradle插件的build.gradle文件,只需直接访问Android DSL,因为它现在可直接使用:
project.android.sdkDirectory
Run Code Online (Sandbox Code Playgroud)
如果您正在创建自定义Gradle Tasks类或插件,或者只是想查看哪些属性可用,则较长的形式(下面)很方便.
// 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}");
Run Code Online (Sandbox Code Playgroud)
在这个帖子发布时,还有一个方便的adbExe财产,绝对值得注意.
此代码必须在根据Gradle生命周期配置Android Gradle插件后执行.通常这意味着您将它放在a的execute方法中,Task或者将它android放在Android app/libraries的build.gradle文件中的DSL声明之后).
这些片段还附带警告,当您升级Android Gradle Plugin版本时,这些属性可以随着插件的开发而改变,因此只需在Gradle和Android Gradle插件以及Android Studio(有时是Android的新版本)之间移动时进行测试Studio需要新版本的Android Gradle插件.
| 归档时间: |
|
| 查看次数: |
43677 次 |
| 最近记录: |