标签: buildconfig

#if debug - > #if myOwnConfig?

在c#中有一种方法可以使用像"#if DEBUG"这样的自定义配置

我需要一个"#if OFFLINE",因为我的Build-Config名称是"离线"(仅用于进一步的调试目的)...

谢谢!

c# debugging buildconfig visual-studio buildconfiguration

67
推荐指数
3
解决办法
2万
查看次数

Gradle buildConfigField BuildConfig无法解析符号

我正在使用Gradle来构建我的Android应用程序.我试图使用基于构建类型(发布或调试)的一些标志.

我的Gradle文件如下所示:

android {
    buildTypes {
        debug {
            buildConfigField 'boolean', 'PREPROD', 'true'
            buildConfigField 'boolean', 'STAGING', 'false'
        }

        release {
            buildConfigField 'boolean', 'PREPROD', 'false'
            buildConfigField 'boolean', 'STAGING', 'false'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我试图打电话BuildConfig.PREPRODBuildConfig.STAGING我得到一个"无法解决符号"错误.Gradle同步成功,所以我不知道是否忘记了一些步骤才能使用此功能?

生成的BuildConfig.java文件如下(in build/source/buildConfig/debug/com.example.myapp):

package com.example.myapp;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "com.example.myapp";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE …
Run Code Online (Sandbox Code Playgroud)

android buildconfig gradle

66
推荐指数
14
解决办法
5万
查看次数

Gradle:如何在android-library中使用BuildConfig,并在应用程序中设置一个标志

我的(gradle 1.10和gradle插件0.8)基于android的项目包含一个大的android-library,它是3个不同的android-app的依赖

在我的图书馆,我希望能够使用这样的结构

if (BuildConfig.SOME_FLAG) {
    callToBigLibraries()
}
Run Code Online (Sandbox Code Playgroud)

因为proguard可以根据SOME_FLAG的最终值减小生成的apk的大小

但我无法想象如何用gradle做到:

* the BuildConfig produced by the library doesn't have the same package name than the app
* I have to import the BuildConfig with the library package in the library
* The apk of an apps includes the BuildConfig with the package of the app but not the one with the package of the library.
Run Code Online (Sandbox Code Playgroud)

我尝试使用BuildTypes和类似的东西没有成功

release {
    // packageNameSuffix "library"
    buildConfigField "boolean", "SOME_FLAG", "true"
}
debug {
    //packageNameSuffix "library" …
Run Code Online (Sandbox Code Playgroud)

buildconfig android-gradle-plugin

54
推荐指数
5
解决办法
4万
查看次数

BuildConfig未正确创建(Gradle Android)

我正在尝试将我们的Android应用程序转换为gradle构建.我有项目,它的库成功建立.我现在正在尝试为我们的各种环境创建单独的apks(dev/test/prod为他们使用的restful服务提供了不同的url).

在搜索时,我觉得这样做的最佳方式是为每个环境制作不同的BuildConfig.这是我试过的:

import java.util.regex.Pattern

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:+'
    }
}

apply plugin: 'android'

task('increaseVersionCode') << {
    def manifestFile = file("AndroidManifest.xml")
    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
    def manifestText = manifestFile.getText()
    def matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionCode = Integer.parseInt(matcher.group(1))
    def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"")
    manifestFile.write(manifestContent)
}

tasks.whenTaskAdded { task ->
    if (task.name == 'generateReleaseBuildConfig') {
        task.dependsOn 'increaseVersionCode'
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.0.0' 
    compile files('libs/commons-io-2.4.jar',
                  'libs/google-play-services.jar',
                  'libs/gson-2.2.4.jar',
                  'libs/universal-image-loader-1.8.6.jar',
                  'libs/wakeful-1.0.1.jar')
    compile project(':pulltorefresh_lib')
    compile project(':edgeeffect_lib') …
Run Code Online (Sandbox Code Playgroud)

android buildconfig gradle android-build android-gradle-plugin

44
推荐指数
11
解决办法
5万
查看次数

包含调试代码的最佳方法?

我正在编写Android应用程序,这里最好的方法可能与一般的Java相同或不同.

我只是希望能够设置一个调试标志,当它设置为true时只执行某些代码部分 - 相当于C++设置预处理器#define DEBUG并使用#ifdef DEBUG.

在Java中有没有可接受的或最好的方法来实现这一目标?

现在我只是在我的Application对象中设置一个变量,但我不认为这是最好的方法.

java debugging android buildconfig

37
推荐指数
6
解决办法
3万
查看次数

我是否可以设置BuildConfig标志,该标志返回是否使用`connectedAndroidTest` gradle任务构建apk?

如果我们正在运行Android单元测试,我的应用程序的一部分我不想运行,因此我想用类似的东西包围它们

if (!BuildConfig.TESTING) {
  // Code here that I don't want to run during tests.
}
Run Code Online (Sandbox Code Playgroud)

是否可以BuildConfig根据是否使用connectedAndroidTestgradle任务来填充此标志?这是解决这个问题的理智方式吗?

android buildconfig gradle android-testing

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

为什么BuildConfig类使用Boolean.parseBoolean()而不是文字值?

在查看BuildConfig由Android Studio和Gradle插件生成的类时,可以看到该BuildConfig.DEBUG字段是使用Boolean.parseBoolean(String)调用初始化的,而不是使用其中一个布尔文字truefalse.

当我使用Gradle添加自定义构建属性时,我会这样做:

android {
    buildTypes.debug.buildConfigField 'boolean', 'SOME_SETTING', 'true'
}
Run Code Online (Sandbox Code Playgroud)

但是看看生成的信息BuildConfig告诉我谷歌采用了与DEBUG旗帜不同的方法:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");

  // more fields here

  // Fields from build type: debug
  public static final boolean SOME_SETTING = true;
}
Run Code Online (Sandbox Code Playgroud)

使用Boolean.parseBoolean(String)而不是文字有什么好处?

android buildconfig android-gradle-plugin

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

使用整数变量gradle buildConfigField

我想定义一个构建配置文件,我可以在它自己使用gradle脚本中定义的变量:

def someVar = 512
android {
...
    buildConfigField 'int', 'SOME_INT_FIELD',  someVar
}
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误:

错误:(25,0)未找到Gradle DSL方法:'buildConfigField()'

可能的原因:

  • 项目"PROJECT"可能正在使用不包含该方法的Gradle版本.
  • 构建文件可能缺少Gradle插件.

  • 我可以使用以下引用:

    def someVar = 0
    android {
    ...
        buildConfigField 'int', 'SOME_INT_FIELD',  '"' + someVar + '"'
    }
    
    Run Code Online (Sandbox Code Playgroud)

    但这导致BuildConfig中的编译器错误

    // Fields from default config.
    public static final int SOME_INT_FILED = "512";
    
    Run Code Online (Sandbox Code Playgroud)

    所以现在我留下来:

    def someVar = 0
    android {
    ...
        buildConfigField 'String', 'SOME_INT_FIELD',  '"' + someVar + '"'
    }
    
    Run Code Online (Sandbox Code Playgroud)

    并使用它像:

    final int value = Integer.valueOf(BuildConfig.SOME_INT_FIELD);
    
    Run Code Online (Sandbox Code Playgroud)

    有没有人有更好的解决方案或我使用buildConfigField错误?

    (我也尝试将括号与上述任何可能性结合使用.)

    variables android buildconfig gradle android-buildconfig

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

    无法解析符号c882c94be45fff9d16a1cf845fc16ec5

    我是一位探索Android世界的新开发者.我目前正在通过Udacity教程创建Sunshine应用程序.在片段活动类中,为了从openweathermap获取数据,我必须将从我的帐户获得的API密钥添加到生成的URL的末尾.在Fragment活动中调用BuildConfig.java (单击以查看对作为String apiKey的一部分在第6行的BuildConfig.java的调用).

    build.gradle文件如下:

    apply plugin: 'com.android.application'
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.1"
        defaultConfig {
            applicationId "com.example.android.sunshine.app"
            minSdkVersion 10
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
    
        }
        buildTypes.each {
            it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', 'c882c94be45fff9d16a1cf845fc16ec5'
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:23.1.0'
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在buildTypes.each it.buildConfigField中使用'String','OPEN_WEATHER_MAP_API_KEY','c882c94be45fff9d16a1cf845fc16ec5'调用

    public static final String OPEN_WEATHER_MAP_API_KEY = c882c94be45fff9d16a1cf845fc16ec5;
    
    Run Code Online (Sandbox Code Playgroud)

    在BuildConfig.java中生成,但我不断收到此错误: 无法解析符号(单击以查看错误消息和BuildConfig.java文件)我不明白为什么字符串OPEN_WEATHER_MAP_API_KEY自动创建为一组字母和数字而没有引用它们,但如果我编辑代码阅读:

    public static final String OPEN_WEATHER_MAP_API_KEY = "c882c94be45fff9d16a1cf845fc16ec5";
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    public static final …
    Run Code Online (Sandbox Code Playgroud)

    java android buildconfig weather-api openweathermap

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

    applicationId显示占位符,表示多个构建版本无法正常工作

    我正在修改当前的android项目,因此它可以安装在同一设备上,用于多种口味和构建配置.

    的build.gradle:

    {
        // ...
        defaultConfig {
            applicationId "com.myapp"
            manifestPlaceholders = [
                manifestApplicationId: "${applicationId}",
                onesignal_app_id: "xxxx",
                onesignal_google_project_number: "xxxx"
            ]
        // ...
        }
    
        productFlavors {
            production {
                applicationId "com.myapp"
                // ...
            }
    
            dev {
                applicationId "com.myapp.dev"
                // ...
            }
    
            // ...
        }
    
        buildTypes {
            release {
                // ...
            }
    
            debug {
                applicationIdSuffix ".debug"
                // ...
            }
        }
    
        // ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    AndroidManifest.xml:

    <manifest ... >
        <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
        <permission
        android:name="${applicationId}.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />      
        <!-- ... -->
    
        <receiver
            android:name="com.onesignal.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action …
    Run Code Online (Sandbox Code Playgroud)

    android buildconfig gradle android-manifest manifest-merging

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