相关疑难解决方法(0)

在Gradle中为Android中的库项目构建变体

我正在尝试使用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)

android gradle library-project android-studio build.gradle

22
推荐指数
2
解决办法
1万
查看次数

如何在Gradle中获取当前的构建类型

我的问题很直接,很容易理解。

在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

11
推荐指数
1
解决办法
6187
查看次数

"testBuildType"可以在Android项目的build.gradle文件中有条件吗?

我有两种构建类型的应用程序:调试和发布.

我想对两种构建类型执行测试.

但目前只测试了一种Build Type.默认情况下,它是调试构建类型,但可以使用以下命令重新配置:android {... testBuildType"release"}

我想逐个执行connectedDebugAndroidTestconnectedReleaseAndroidTest而不更改gradle文件.

是否有可能使"testBuildType"成为条件?因此,根据gradle任务中的构建变量(connectedDebugAndroidTest和connectedReleaseAndroidTest),它将对该构建执行测试.

android gradle gradlew build.gradle android-gradle-plugin

8
推荐指数
1
解决办法
2973
查看次数

Gradle获取当前构建类型

所有!

我正在尝试让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)

android intellij-idea gradle android-studio

5
推荐指数
1
解决办法
5188
查看次数

模块依赖 - Android Studio

我的项目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)

关于如何解决这个问题的任何想法?

android gradle

5
推荐指数
1
解决办法
3808
查看次数

How to disable Android NDK build for some build variant

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

5
推荐指数
1
解决办法
2589
查看次数

Android Gradle如何根据当前的buildType设置变量

如何根据当前的构建类型设置变量,我已经尝试过

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,任务generateReleaseBuildConfiggenerateDebugBuildConfig都会执行,所以我永远不会根据当前的 buildType 获取值。我指定此变量稍后在构建脚本中使用,而不是在 Java 代码中使用。

我尝试过在 SO 中找到的几种解决方案,但没有一个对我有用

android gradle

1
推荐指数
1
解决办法
1772
查看次数