6

Tôi quan tâm đến việc xác định nhiều hương vị ứng dụng của mình hơn trong tệp strings.xml thay vì build.gradle. Với nhiều hương vị, tôi muốn một đơn giản phát hành/debug biến thể:Xác định 'resValue' bằng cách sử dụng định nghĩa chuỗi hiện tại

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
     resValue "string", "app_name", "@string/prod_name" 
    } 
    debug { 
     applicationIdSuffix ".beta" 
     resValue "string", "app_name", "@string/beta_name" 
    } 

Sau đó, trong mỗi tùy chỉnh res/values ​​/ file strings.xml build của tôi hương vị, tôi sẽ xác định mỗi họ 'PROD_NAME' riêng và "beta_name". Tôi cũng muốn sử dụng khung tương tự này để xác định chính quyền của các nhà cung cấp, v.v.

Điều này hiện sẽ được xây dựng tốt thông qua dòng lệnh nhưng không được Android Studio công nhận.

Android Studio Lỗi:

Tôi tìm thấy điều này trong 'generated.xml'

<!-- Values from build type: debug --> 
<string name="app_name">@string/beta_name</string> 

Đó là điển hình về cách một chuỗi tham chiếu khác. Nhưng lần này Android Studio mang lại cho tôi lỗi này:

Error:(7, 29) No resource found that matches the given name 
(at 'app_name' with value '@string/beta_name'). 

Tôi đang sử dụng Android Studio 2.1 Preview 5

+0

Bạn có thể cụ thể hơn về chính xác "không được Android Studio công nhận" nghĩa là gì? –

+0

..w.Tại sao bạn không đặt đúng chuỗi vào đúng thư mục tài nguyên? 'src/release/res/values ​​/ strings.xml' để giải phóng các chuỗi cụ thể,' src/debug/res/values ​​/ strings.xml' để gỡ lỗi xây dựng? –

Trả lời

4

Theo kinh nghiệm của tôi bạn không thể giải quyết một @string/my_string trong resValue DSL. Gradle đặt giá trị dưới dạng một chuỗi đơn giản bên trong tệp tài nguyên.

Trong trường hợp này bạn có thể sử dụng thư mục khác nhau để đạt được nó:

Chỉ cần sử dụng:

src/release/res/values/strings.xml 
src/debug/res/values/strings.xml 

Nếu bạn muốn sử dụng tài nguyên khác nhau cho từng xây dựng biến thể (xây dựng loại + hương vị), bạn có thể sử dụng:

src/flavor1Release/res/values/strings.xml 
src/flavor1Debug/res/values/strings.xml 
src/flavor2Release/res/values/strings.xml 
src/flavor2Debug/res/values/strings.xml 
+0

Nếu tôi đã làm việc với nhiều hương vị thì sao? Tôi có thư mục "res" thường xuyên của tôi, cũng như thư mục res của tôi: "/ one/res /", "/ two/res" v.v ... Tôi đã cố gắng chỉ định "prod_name" và "beta_name" trong mỗi thư mục res của mỗi hương vị, do đó giảm thiểu một yếu tố nữa là nhân 2 thư mục ... – FishStix

+0

Trong trường hợp này chỉ cần thêm các chuỗi (có các giá trị khác nhau trong buildtype) vào các tệp này. –

+0

Không thể tìm thấy một ví dụ tuyệt vời trong tài liệu. Làm thế nào để tôi đi về xác định các thư mục gỡ lỗi và phát hành cho mỗi hương vị. Tôi đã có "res" chính của tôi cũng như "một/res", "hai/res", vv ... cho tất cả các hương vị. – FishStix

2

Điều này thực sự có thể. Tất cả những gì bạn phải làm là khai báo các chuỗi đó dưới dạng rỗng trong defaultConfig của bạn, như sau:

defaultConfig { 
    resValue "string", "prod_name", "" 
    resValue "string", "beta_name", "" 
} 
+0

Và điều này sẽ không xung đột với các định nghĩa trong các tệp strings.xml của mỗi hương vị? Tệp strings.xml của flavor ghi đè 'defaultConfig' của gradle? – FishStix

+1

Đúng vậy. – steffandroid

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