Gradle buildConfigField BuildConfig không thể phân giải biểu tượng


81

Tôi đang sử dụng Gradle để xây dựng ứng dụng Android của mình. Tôi đang cố gắng sử dụng một số cờ dựa trên loại xây dựng (phát hành hoặc gỡ lỗi).

Tệp Gradle của tôi trông giống như sau:

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

        release {
            buildConfigField 'boolean', 'PREPROD', 'false'
            buildConfigField 'boolean', 'STAGING', 'false'
        }
    }
}

Và nếu tôi cố gắng gọi BuildConfig.PREPRODhoặc BuildConfig.STAGINGtôi gặp lỗi "Không thể giải quyết biểu tượng". Đồng bộ Gradle đã thành công, vì vậy tôi không biết mình có quên một số bước để có thể sử dụng tính năng này không?

Tệp được tạo BuildConfig.javanhư sau (trong 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 = 400;
  public static final String VERSION_NAME = "";
}

Bạn có thể kiểm tra xem lớp BuildConfig thích hợp đã được tạo chưa. Nó muốn được nằm ởbuild/source/buildconfig/debug/...
Xavier Ducrohet

Tôi đã thêm BuildConfig.javacâu hỏi đã tạo vào câu hỏi của mình.
Gaëtan

Bạn đang sử dụng phiên bản plugin nào? Với 0.9.1, tôi không thấy điều này (cả hai boolean đều hiển thị trong lớp).
Xavier Ducrohet

4
Bạn không cần phải đồng bộ hóa (mặc dù Studio sẽ yêu cầu bạn làm điều đó vì nó không biết bạn có thay đổi mô hình hay không), nhưng bạn sẽ cần phải xây dựng, vì lớp BuildConfig được tạo trong quá trình xây dựng dựa trên những gì trong tệp build.gradle.
Xavier Ducrohet

2
Xin chào, tôi quản lý hai hương vị trong ứng dụng thông qua cài đặt cấu hình và giống như bạn, tôi đang cố gắng tạo một số biến cấu hình nhưng cho hương vị khác. Tôi đã thử theo cách của bạn nhưng không thấy bất kỳ cập nhật nào trong hương vị / BuildConfig.java và do đó không thể truy cập biến ngay cả trong thời gian Biên dịch. Bất kì lời đề nghị nào !
CoDe

Câu trả lời:


83

Đảm bảo rằng tệp của bạn đang nhập đúng lớp BuildConfig . Đôi khi nếu bạn có các thư viện hoặc mô-đun dự án khác, nó có thể nhập sai buildConfig. Đảm bảo rằng nhập của bạn giống như com.project.app.BuildConfig này . Tôi đã gặp vấn đề tương tự và vấn đề là vấn đề này, Hy vọng nó có thể giúp ai đó.


2
Bạn đã cứu ngày của tôi! Cảm ơn ngài !
Astyan

1
@Astyan rất vui vì tôi có thể giúp đỡ.
MRodrigues

làm cách nào để làm điều này với vairents xây dựng khi com.xx đầy đủ thay đổi?
Zapnologica

Các biến thể bản dựng @Zapnologica sẽ không ảnh hưởng đến điều này. Miễn là bạn đã xác định các biến của mình trên từng biến thể, trên tệp build.gradle.
MRodrigues

5 năm sau và tôi nợ bạn một lời cảm ơn lớn. Trong trường hợp của tôi, nó đang sử dụng algoliasearch.BuildConfig mà tôi thậm chí không nhập nó
Dusttrash

44

Tôi đã nhận được cùng một lỗi. Cố gắng nhấp vào đồng bộ hóa , ở phía bên phải của lưu . Làm điều đó sau khi đồng bộ hóa gradle .


8
Đồng bộ hóa ở đâu?
Lucky_girl

25

Xảy ra với tôi vì tôi đã không khai báo trường Chuỗi đúng cách.

Tôi quên các ký tự thoát. Thay đổi từ:

buildConfigField "String", "FOO", "foo"

đến

buildConfigField "String", "FOO", "\"foo\""

Đã giải quyết vấn đề.


Đây là nó cho tôi! Cảm ơn! Đôi khi nó thực sự là những điều nhỏ bé chết tiệt :)
MacD

23

Các thay đổi trong tệp bản dựng gradle không làm mới quá trình tạo lớp BuildConfig, ngay cả khi bạn nhấp vào thanh "đồng bộ hóa ngay bây giờ" màu vàng ở trên cùng. Hoàn toàn sạch sẽ buộc tạo tệp này.

Trong Android Studio: Build -> Clean Project


16

Đảm bảo rằng bạn cũng thêm thông số của mình vào defaultConfig. Có thể bạn đang chạy buildVarient mặc định trong khi tham số của bạn được xác định trong một buildVariant cụ thể.

trong tệp gradle xây dựng, hãy sử dụng cái này:

 defaultConfig {
        buildConfigField('String' , 'myParameter', 'someValue')
    }

Sau đó, trong mã sử dụng cái này:

String myParam= BuildConfig.myParameter;

Hy vọng điều này sẽ giúp, MA :)


13

Điều tương tự đã xảy ra với tôi, đã sửa khi chạy điều này trong gốc dự án:

./gradlew assembleDebug

12

Trước tiên, bạn phải chọn biến thể xây dựng mong muốn để có thể truy cập vào buildConfigField của nó

nhập mô tả hình ảnh ở đây


Điều này đã giúp tôi. Tôi đã chọn một biến thể bản dựng, nhưng việc thay đổi nó đã gây ra một bản dựng lại khiến lỗi biến mất.
LarsH ngày

11

nếu loại vấn đề này xảy ra, chỉ cần dọn dẹp và xây dựng lại dự án của bạn.

cảm ơn.


5

Vấn đề tương tự này đã khiến tôi phát điên trong hơn một tuần. Trong trường hợp của tôi, đó là một lần nhập đơn giản bị thiếu. Tôi đã tìm kiếm nó nhưng không hiểu sao trong tài liệu tôi có thể tìm thấy nó không đề cập đến việc bạn cần nhập lớp BuildConfig ở bất kỳ đâu! Tuy nhiên, nó hợp lý. Tôi đã tin rằng nó có thể tự động. Ồ, KHÔNG.

Vì vậy, hãy thử:

  • nhấp một lần vào BuildConfig.phần mã gây ra lỗi. Một thông báo trợ giúp sẽ xuất hiện trong bong bóng màu xanh với nội dung như: " ? uk.co.package.app.BuildConfig? Alt + ENTER" Nhấp vào đó và Android studio sẽ tự động thêm phần nhập bị thiếu. hoặc là
  • thêm import uk.co.package.app.BuildConfig;vào một nơi nào đó trong danh sách nhập khẩu của bạn.

xây dựng lại ... nó hoạt động! tốt, nó đã làm cho tôi anyway.

Hy vọng điều đó sẽ giúp một newbie android gradle khác như tôi!


4

Trong Android Studio, - nhấp vào Xây dựng rồi làm sạch Dự án - Sau khi dọn dẹp, nhấp vào Xây dựng lại dự án. - Khi hoàn thành, hãy đóng dự án của bạn. - Mở lại dự án của bạn và chạy nó, lỗi sẽ không xuất hiện nữa, nó đã được xóa.


2

Trong trường hợp của tôi, vấn đề là tôi vừa đổi tên một mô-đun trong dự án của mình, nhưng các tham chiếu tên của mô-đun đó không được cập nhật tự động trên AndroidManifest.xml.

Đổi tên theo cách thủ công và xây dựng lại dự án đã giải quyết được vấn đề.


Tôi đã thực hiện một số cấu trúc lại và không thay đổi hoàn toàn tất cả các trường hợp; câu trả lời này đã chỉ cho tôi đi đúng hướng. Cảm ơn!
Cezille07

cùng một vấn đề. đã thử làm sạch dự án. khởi động lại studion android. không có gì làm việc lỗi vẫn còn đó. Sau đó, tôi làm sạch nó một lần nữa (Xây dựng> Dự án sạch) sau đó tôi chạy gỡ lỗi bằng vũ lực. nó đã thành công sau khi xây dựng và lỗi đã biến mất.
Trưởng

2

Tìm kiếm các lần xuất hiện của BuildConfig. Tôi đã có một lần nhập giả mạo BuildConfig không tồn tại và trình biên dịch thay vì bắt nó trỏ đến một dòng mã ngẫu nhiên ở một nơi khác!


2

Trong trường hợp của tôi, trong Android Studio:

  1. Xây dựng -> Dự án sạch;

  2. Tệp -> Không hợp lệ bộ nhớ cache / Khởi động lại ...

  3. Xây dựng -> Xây dựng lại dự án


0

Gói hàng của tôi không được cập nhật trong tệp kê khai của tôi. Tôi đã kiểm tra tệp AndroidManifest.xml và sửa tên gói của mình. Đây là cách tôi giải quyết vấn đề này.


0

2 xu của tôi:

Tôi đã có một câu trả lời đúng import xxx.BuildConfig, AS sẽ trỏ đến dòng đó và đến những dòng mà tôi có BuildConfig.SOME_VARIABLE, vì vậy tôi đã xóa importdòng, xây dựng lại nó, gặp lỗi khi nói điều đó BuildConfig is unrecognised reference blah blahvà sau đó tôi đã nhập nó và xây dựng lại nó.


0

Tôi đã gặp lỗi tương tự trong quá trình xây dựng (gỡ lỗi) dự án cũ trong Android studio. Khi tôi điều tra lỗi, tôi thấy rằng lớp BuildConfig được xác định trong 2 tệp. Thứ nhất là BuildConfig.java và thứ hai là BuildConfig2.java.

Tôi đã xóa một trong những tệp và tôi đã làm việc chính xác.


Tôi đã xóa một trong các tệp BuildConfig.java và sau đó xây dựng dự án thành công và bắt đầu gỡ lỗi.
Alok Kumar

0

Trong trường hợp của tôi, tôi đã phạm một sai lầm ngớ ngẩn khi SAO CHÉP VÀ TRẢ LẠI CÙNG BIẾN TẦN. Tôi vừa đổi tên biến thể khác và nó đã hoạt động.

nhập mô tả hình ảnh ở đây


0

Giải pháp khả thi: Nếu bạn đang sử dụng thư viện thanh toán Android X , có thể bằng cách thêm dòng sau vào build.gradletệp của bạn :

implementation 'com.android.billingclient:billing:2.2.0'

Lưu ý rằng thư viện thanh toán của Android CŨNG bao gồm lớp riêng của nó BuildConfig, điều này có thể gây nhầm lẫn cho trình soạn thảo mã của Android Studio. Nếu điều này xảy ra, nó có thể tự động thêm importcâu lệnh sau vào một trong các lớp của bạn:

import com.android.billingclient.BuildConfig;

Đó không phải là một trong những bạn muốn sử dụng, phải không? Một trong những bạn muốn sử dụng (nếu bạn đang thực hiện một bản dựng gỡ lỗi) có thể ở đây:

./build/generated/source/buildConfig/debug/com/example/myapp/BuildConfig.java

Vì vậy, để khắc phục, hãy xóa dòng câu lệnh nhập đó và xây dựng lại để xem liệu nó có thể giải quyết đúng không BuildConfig.java. Nếu không thể, bạn có thể cần đặt tên rõ ràng cho nó thông quaimport com.example.myapp.BuildConfig.java để làm rõ ràng rằng bạn muốn phiên bản của tệp này từ gói của bạn chứ không phải bất kỳ phiên bản nào khác.

Hi vọng điêu nay co ich!



0

Xây dựng lại mô-đun của bạn bằng cách nhấp chuột phải vào mô-đun của bạn và chọn Rebuild Module 'module name'

hoặc sử dụng phím ngắn: Ctrl+ Shift+F9

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.