2014-10-20 20 views
12

Tôi vừa chuyển sang hệ thống xây dựng gradle android và không rõ ràng đối với tôi cách đặt giá trị không đổi.Đặt giá trị không đổi với gradle

ví dụ: Tôi đã

API.java chứa

BASE_URL = "http://debug.server.com" 

nhưng khi gradle xây dựng phát hành Tôi cần BASE_URL"http://release.server.com"

Làm thế nào để thay thế giá trị này vào thời điểm xây dựng?

Trả lời

18

Gradle tạo một lớp có tên là BuildConfig chứa các thành viên tĩnh (chẳng hạn như boolean DEBUG, được đặt thành true cho các biến thể gỡ lỗi).

Bạn có thể hoặc truy vấn này trong java như vậy:

if (BuildConfig.DEBUG) { 
    BASE_URL = "http://debug.server.com" 
} else { 
    BASE_URL = "http://release.server.com" 
} 

hoặc những điều tương tự như một lớp lót:

BASE_URL = BuildConfig.DEBUG ? "http://debug.server.com" : "http://release.server.com" 

HOẶC

Bạn có thể thực sự đặt BASE_URL bên trong BuildConfig lớp sử dụng gradle như vậy:

android { 
    buildTypes { 
     debug { 
      buildConfigField "String", "BASE_URL", '"http://debug.server.com"' 
     } 

     release { 
      buildConfigField "String", "BASE_URL", '"http://release.server.com"' 
     } 
    } 
} 

Lưu ý đơn và đôi trích dẫn xung quanh giá trị trong gradle, như những người khác đã đề cập trong các ý kiến. Bằng cách này, các dấu nháy kép trở thành một phần của giá trị.

Kết quả là, các tài liệu tham khảo tĩnh BuildConfig.BASE_URL sẽ trỏ đến URL tương ứng (ví dụ: "debug.server.com" cho debug, "release.server.com" cho phát hành)

+1

Cảm ơn rất nhiều, sẽ sử dụng phương pháp thứ hai, nó rất linh hoạt –

+1

Bạn được chào đón. Cảm thấy tự do để đánh dấu là câu trả lời khi bạn có thể;) –

+3

câu trả lời của bạn chỉ có tác dụng đối với tôi nếu tôi sử dụng dấu ngoặc kép thay vì độc thân và thoát khỏi chuỗi URL, như thế này: android { buildTypes { debug { buildConfigField "Chuỗi "," BASE_URL "," \ "http: //debug.server.com \" " } phát hành { buildConfigField" Chuỗi "," BASE_URL "," \ "http: //release.server.com \ "" } } } –

0

trả lời của fifer-cừu là chính xác. Chỉ muốn để lại một giải pháp cho hơn hai môi trường.

Hai hương vị để dàn dựng và sinh sống.

productFlavors { 
    staging { 
     ... 
    } 
    production { 
     ... 
    } 
} 

Cấu hình ứng dụng toàn bộ dựa trên ENV hiện tại. Sử dụng:

public static String ENV_DEVELOPMENT = "development"; 
public static String ENV_STAGING = "staging"; 
public static String ENV_PRODUCTION = "production"; 

ENV = BuildConfig.DEBUG ? ENV_DEVELOPMENT : BuildConfig.FLAVOR; 

Tôi có thể chuyển đổi giữa tất cả các ENV khác nhau trong khi kiểm tra cục bộ nhưng cài đặt dàn/phát trực tiếp nếu phát hành.

Các vấn đề liên quan