我正在尝试使用Gradle配置一个包含一些外部库的项目.使用Gradle我可以使用Build Variants为主应用程序设置不同的环境配置(在配置文件中有一个类),这样我就可以根据这些变量执行代码.
问题是我如何为图书馆项目做同样的事情?我为这个项目创建了这个库,我想为不同的场景设置不同的Build Variants.
例如:在库中,当在调试模式下运行时,然后打印所有日志,以便我可以在开发时看到它们.在发布模式下不要.
文件结构:
src ----- > debug -> java -> config -> PlayerEnvConfig
main -> com.mypackagename -> etc...
release -> java -> config -> PlayerEnvConfig
Run Code Online (Sandbox Code Playgroud)
debug中的代码:package config;
/**
* Environment configuration for Release
*/
public final class PlayerEnvConfig {
public static final boolean USE_REPORTING = true;
public static final boolean USE_ANALYTICS = true;
public static final boolean USE_LOGGING = false;
public static final boolean USE_DEBUG_LOGGING = false;
public static final boolean USE_DEBUGING = false;
}
Run Code Online (Sandbox Code Playgroud)
发布代码:
package …Run Code Online (Sandbox Code Playgroud) 我的问题很直接,很容易理解。
题
在Gradle中,有什么方法可以在运行时获取当前的构建类型。例如,在运行汇编Debug任务时,build.gradle文件中的任务是否可以基于该任务与debug build变体相关的事实来做出决策?
样例代码
apply plugin: 'com.android.library'
ext.buildInProgress = ""
buildscript {
repositories {
maven {
url = url_here
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
configurations {
//get current build in progress here e.g buildInProgress = this.getBuildType()
}
android {
//Android build settings here
}
buildTypes {
release {
//release type details here
}
debug {
//debug type details here
}
anotherBuildType{
//another build type details here
}
}
}
dependencies {
//dependency list here …Run Code Online (Sandbox Code Playgroud) android gradle android-studio build.gradle android-gradle-plugin
我有两种构建类型的应用程序:调试和发布.
我想对两种构建类型执行测试.
但目前只测试了一种Build Type.默认情况下,它是调试构建类型,但可以使用以下命令重新配置:android {... testBuildType"release"}
我想逐个执行connectedDebugAndroidTest和connectedReleaseAndroidTest而不更改gradle文件.
是否有可能使"testBuildType"成为条件?因此,根据gradle任务中的构建变量(connectedDebugAndroidTest和connectedReleaseAndroidTest),它将对该构建执行测试.
所有!
我正在尝试让Gradle为发布和调试版本生成不同的文件(Android.mk和Application.mk).默认方式,gradle android插件这样做并不适合我,因为它不允许修改Application.mk,我想.主要问题是我无法识别当前的构建类型.我尝试了以下方法:
android {
...
defaultConfig {
project['CONFIGURATION_FLAGS'] = ''
project['APP_ABI'] = ''
project['APP_PLATFORM'] = 'android-9'
project['APP_STL'] = 'gnustl_static'
project['NDK_TOOLCHAIN_VERSION'] = 'clang'
}
buildTypes {
release {
project['CONFIGURATION_FLAGS'] = '-fvisibility=hidden'
project['APP_ABI'] = 'armeabi x86'
}
debug {
project['CONFIGURATION_FLAGS'] = '-g -DDEBUG -DENABLE_LOG'
project['APP_ABI'] = 'armeabi'
}
}
}
task processTemplates {
def templatesDir = System.getProperty('user.dir') + '/app/templates'
def jniDir = System.getProperty('user.dir') + '/app/src/main/jni'
// Android.mk
def configFlags = project['CONFIGURATION_FLAGS']
def androidMk = file(templatesDir + '/Android.mk').text
androidMk = androidMk.replaceAll '<CONFIGURATION_FLAGS>', …Run Code Online (Sandbox Code Playgroud) 我的项目M1,M2下有2个模块
Project
- M1
- M2
Run Code Online (Sandbox Code Playgroud)
早些时候,我把M1作为我的主要应用程序.然而,需要新的应用程序M2与M1共享许多常见的东西.所以,我创建了一个新模块M2,其中M1作为依赖.
为此,我修改了M1和M2的build.gradle,如下所示:
M2:
compile project(':M1')
Run Code Online (Sandbox Code Playgroud)
M1 :(改为图书馆)
apply plugin: 'com.android.library'
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用并引发错误:
Could not find property 'applicationVariants' on com.android.build.gradle.LibraryExtension_Decorated@6de81701.
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法?
I am using Android Studio 2.2 and have setup Gradle to build c/c++ sources with NDK via CMake.
Now I would like to disable NDK build for buildType "debug". For buildType "release" I would like to keep it.
The goal is to make NDK sources compile on the build server (using "release") but disable it for developers (using "debug").
This is the build.gradle file currently in use:
android {
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
defaultConfig {
externalNativeBuild …Run Code Online (Sandbox Code Playgroud) c++ android-ndk build.gradle android-gradle-plugin gradle-plugin
如何根据当前的构建类型设置变量,我已经尝试过
String url = "https://dev.myurl.com"
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig' || task.name == 'generateDebugBuildConfig') {
if (task.name == 'generateReleaseBuildConfig') {
url = "https://prod.myurl.com"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但无论当前的 buildType 是 Release 还是 Debug,任务generateReleaseBuildConfig和generateDebugBuildConfig都会执行,所以我永远不会根据当前的 buildType 获取值。我指定此变量稍后在构建脚本中使用,而不是在 Java 代码中使用。
我尝试过在 SO 中找到的几种解决方案,但没有一个对我有用