BuildConfig 未正确创建(Gradle Android) [英] BuildConfig not getting created correctly (Gradle Android)

查看:29
本文介绍了BuildConfig 未正确创建(Gradle Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将我们的 Android 应用程序转换为 gradle 版本.我有这个项目,它的图书馆建设成功.我现在正在尝试为我们的各种环境创建单独的 apk(dev/test/prod 对它们使用的 restful 服务有不同的 url).

I am trying to convert our Android application to a gradle build. I have the project and it's libraries building successfully. I am now trying to create separate apks for our various environments (dev/test/prod have different urls for the restful services they consume).

在四处搜索时,我认为最好的方法是为每个环境制作不同的 BuildConfig.这是我尝试过的:

In searching around, the best way that I feel to do this is with making different BuildConfig for each environment. This is what I tried:

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')
    compile project(':viewpagerindicator_lib')        
}

android {
    buildToolsVersion "18.1.1"
    compileSdkVersion "Google Inc.:Google APIs:18"

    defaultConfig { 
       minSdkVersion 14
       targetSdkVersion 18
    }

    buildTypes {
        debug {
            packageNameSuffix ".debug"
        }
        dev.initWith(buildTypes.debug)
        dev {
            buildConfigField "String", "URL_SEARCH", ""https://dev-search.example.com";"
            buildConfigField "String", "URL_CONNECT", ""https://dev-connect.example.com";"
            buildConfigField "String", "URL_SVC_NEWSLIST", ""https://dev-mobilenews.example.com/newslist";"
            buildConfigField "String", "URL_SVC_NEWSDETAIL", ""https://dev-mobilenews.example.com/newsdetail";"
            buildConfigField "String", "URL_SVC_REGISTERENDPOINTS", ""https://dev-mobilenews.example.com/registerendpoints";"
        }
        prod.initWith(buildTypes.release)
        prod {
            buildConfigField "String", "URL_SEARCH", ""https://search.example.com";"
            buildConfigField "String", "URL_CONNECT", ""https://connect.example.com";"
            buildConfigField "String", "URL_SVC_NEWSLIST", ""https://mobilenews.example.com/newslist";"
            buildConfigField "String", "URL_SVC_NEWSDETAIL", ""https://mobilenews.example.com/newsdetail";"
            buildConfigField "String", "URL_SVC_REGISTERENDPOINTS", ""https://mobilenews.pdc-np-cf.lmig.com/registerendpoints";"          
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

问题是我的 BuildConfig.java 似乎没有注入静态变量,因此我收到类似以下的错误:

The problem is that my BuildConfig.java doesn't seem to get the static variables injected, therefore I get errors similar to:

/Users/path/to/project/MainActivity.java:348: error: cannot find symbol
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(BuildConfig.URL_SEARCH)));
                                                                              ^
  symbol:   variable URL_SEARCH
  location: class BuildConfig
/Users/path/to/project/MainActivity.java:359: error: cannot find symbol
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(BuildConfig.URL_CONNECT)));
                                                                              ^
  symbol:   variable URL_CONNECT
  location: class BuildConfig
/Users/path/to/project/MainActivity.java:600: error: cannot find symbol
            HttpPost httpPost = new HttpPost(BuildConfig.URL_SVC_REGISTERENDPOINTS);
                                                        ^
  symbol:   variable URL_SVC_REGISTERENDPOINTS
  location: class BuildConfig
/Users/path/to/project/service/AlarmNotificationService.java:145: error: cannot find symbol
        String requestUrl = BuildConfig.URL_SVC_NEWSLIST + "?"
                                       ^
  symbol:   variable URL_SVC_NEWSLIST
  location: class BuildConfig
/Users/path/to/project/service/NewsService.java:240: error: cannot find symbol
        String requestUrl = BuildConfig.URL_SVC_NEWSLIST + "?"
                                       ^
  symbol:   variable URL_SVC_NEWSLIST
  location: class BuildConfig
/Users/path/to/project/service/NewsService.java:530: error: cannot find symbol
            HttpPost httpPost = new HttpPost(BuildConfig.URL_SVC_NEWSDETAIL);
                                                        ^
  symbol:   variable URL_SVC_NEWSDETAIL
  location: class BuildConfig
6 errors

我的 build/source/buildConfig/debug/com/.../BuildConfig.java 文件包含:

My build/source/buildConfig/debug/com/.../BuildConfig.java file contains:

/**
 * Automatically generated file. DO NOT MODIFY
 */
package com....;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "com.....debug";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 5;
}

我做错了什么?

推荐答案

请确保您正在构建dev"或prod"变体.默认的调试"和发布"变体中没有 BuildConfig 定义.在 Android Studio 中,您可以在左下角选择当前变体:

Please, be sure that you are building "dev" or "prod" variant. There is no BuildConfig definition in default "debug" and "release" variant. In Android Studio, you can select current variant in bottom left corner:

为了简化您的 build.gradle 文件,您可以定义:

To simplify your build.gradle file, you can define:

buildTypes {
    debug {
        buildConfigField "String", "URL_SEARCH", ""https://dev-search.example.com""
        // etc.
    }
    release {
        buildConfigField "String", "URL_SEARCH", ""https://search.example.com""
        // etc.      
    }
}

然后只使用默认的调试"和发布"变体.

and then just use default "debug" and "release" variants.

最后,从 buildConfigField 参数的值中删除分号(符号:';').

At last, delete semicolon (sign: ';') from the value of buildConfigField parameter.

这篇关于BuildConfig 未正确创建(Gradle Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆