当前位置: 首页 > 知识库问答 >
问题:

未正确创建BuildConfig(Gradle Android)

段干长恨
2023-03-14

我试图将我们的Android应用程序转换为gradle构建。我有这个项目,它的图书馆建设成功。我现在试图为我们的各种环境创建单独的apks(dev/test/prod对他们使用的restful服务有不同的网址)。

在四处搜索时,我觉得最好的方法是为每个环境制作不同的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')
    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似乎没有注入静态变量,因此我得到类似于以下错误:

/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

我的构建/source/buildConfig/debug/com//BuildConfig。java文件包含:

/**
 * 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;
}

我做错了什么?

共有3个答案

万英武
2023-03-14

先做

File -> Invalidate Caches/Restart... -> Invalidate and Restart 

那就做吧

Build -> Clean Project

那就做吧

Build - > Rebuild Project 
华温书
2023-03-14

我有相同的问题,并修复如下:

buildConfigField 'String', 'BASE_URL', '"https://api.example.com"'
秦鹏飞
2023-03-14

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

简化您的构建。gradle文件,您可以定义:

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

然后只需使用默认的“调试”和“发布”变体。

最后,从buildConfigField参数的值中删除分号(符号:“;”)。

 类似资料:
  • 使用构建类型为不同环境构建APK 我正在用这篇文章来构建我的apk,而不是android studio。除了在gradle中使用环境变量外,其他一切都正常: 在构建之前,我设置了环境变量 然后在我的build.gradle: 当我执行:gradle assemble时,我得到一个错误: 我尝试了几种组合,但得到了相同的错误: BuildConfig无法正确创建(Gradle Android) Bu

  • 注意:我在“可能重复”的问题中尝试了建议的答案,不幸的是,它们对我没有帮助。我稍微修改了一下我的问题。 错误是(翻译过来的,可能是不正确的措辞): myapp.jar中没有主清单属性 我尝试过在不同的平台上建议的不同的解决方案(例如这里和这里)。然而,据我所知,这似乎是我的的一个问题。 我的POM: 我查阅了我的,内容如下: 我似乎缺少的是: 我查阅了-文件,注意到了以下几点: 缺少文件 我的中没

  • 我们有一个C#可执行文件,它加载一个用C++编写的32bit dll,它动态加载另一个32bit dll(第一个dll是包装器)。 当它构建在32位机器上(使用VS toolset v100)时,它都能正常工作。

  • > 我通过terraform创建了一个自签名tls证书和私钥。这些文件称为服务器。密钥和服务器。crt 我用这个证书和私钥创建了一个kubernetes tls机密:kubectl create secret tls dpaas secret-n dpaas prod-key server。密钥--cert server.crt 这工作正常,nginx入口ssl终止工作,以下kubectl命令:k

  • 问题内容: 我正在尝试使用Bokeh而不是matplotlib复制此问题中显示的HeatMap。我不能完全正确。现有的示例并没有帮助我了解我在做什么错。我卑微的尝试 给 请注意,尽管标题相似,但这并不能回答我的问题。这不是相同的错误,我正在使用Bokeh 0.12.3 问题答案: 更改数据的生成以按元素重复,并且它应该是正确的: 因此,适用于我的代码如下:

  • 以下代码来自https://docs.microsoft.com/en-us/aspnet/core/security/authentication/accconfirm?view=aspnetcore-3.1 生成错误的URL(如下)。它应该 /Identity/Account/ConfirmEmail路径。如何修复上面的代码以获得正确的路径? https://localhost:5001/?a