2015-01-21 19 views
5

Tôi có một ứng dụng có nhiều biến thể xây dựng. Các biến thể được sử dụng để xây dựng các phiên bản của cùng một ứng dụng cho các công ty khác nhau. Vì vậy, tôi có các biến thể khác nhau mà xây dựng các ứng dụng khác nhau:Làm cách nào để thay đổi tệp AndroidManifest.xml dựa trên các biến thể xây dựng?

  • com.acme.app1
  • com.schmoe.app2
  • com.yop.app3
  • vv ...

File build.gradle xử lý này rất tốt:

 productFlavors { 
    app1 { 
     applicationId "com.acme.app1" 
    } 

    app2 { 
     applicationId "com.schmoe.app2" 
    } 

    app3 { 
     applicationId "com.yop.app3" 
    } 

} 

Dưới đây là pro của tôi blem. Tôi đang tích hợp Dropbox vào ứng dụng của mình. Tệp AndroidManifest.xml phải được thay đổi cho mỗi biến thể để bao gồm khóa ứng dụng thích hợp (được lưu trữ trong tệp chuỗi của tôi). Dropbox có việc bổ sung sau vào file manifest:

  <activity 
     android:name="com.dropbox.client2.android.AuthActivity" 
     android:launchMode="singleTask" 
     android:configChanges="orientation|keyboard"> 

     <intent-filter> 
      <!-- Change this to be db- followed by your app key --> 
      <data android:scheme="db-abcdef" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

Mỗi build biến thể cần phải thay đổi dòng sau:

<data android:scheme="db-abcdef" /> 

với giá trị phù hợp với từng biến thể ứng dụng. Nói cách khác, tôi cần phải thay thế một phần của chuỗi ở trên dựa trên biến thể xây dựng. Ví dụ

App1

<data android:scheme="db-111111" /> 

App2

<data android:scheme="db-222222" /> 

App3

<data android:scheme="db-333333" /> 

Dòng là như nhau cho mỗi biến thể lên đến dòng chữ "db-".

Điều tôi cần là tự động thay thế phần biến của chuỗi (giá trị x) "db-xxxxxx" bằng chuỗi từ tệp chuỗi của tôi.

Tôi nghĩ rằng điều này có thể được thực hiện với các tập lệnh gradle nhưng tôi là một newb hoàn chỉnh với gradle. CỨU GIÚP!

Nếu bạn có thể trợ giúp, hãy rất cụ thể về những gì diễn ra kể từ khi tôi SUCK ở tệp gradle và kịch bản. Cảm ơn trước!

Trả lời

4

Bạn có thể làm điều này giống như cách bạn sửa đổi tên ứng dụng, sử dụng tài nguyên chuỗi. Trong biểu hiện của bạn, bao gồm:

<data android:scheme="@string/db_scheme" /> 

Tiếp theo, bạn thêm các thư mục nguồn lực cho việc xây dựng các loại khác nhau, và trong mỗi, đặt một bản sao tùy chỉnh của một tập tin tài nguyên, nói res/values/flavor.xml:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<resources> 
    <string name="app_name">Customer 1 App</string> 
    <string name="db_scheme">db-111111</string> 
</resources> 

chí này cho phép bạn có các khóa API, lược đồ, tên ứng dụng, biểu tượng, v.v. khác nhau cho các hương vị khác nhau của bạn.

+0

Có cách nào để nối các dây? Chuỗi trong tệp chuỗi chỉ là phần sau db-. Đã dịch: Giả sử phím ứng dụng là 123456. Mục nhập chuỗi là "123456". Tôi cần phải nối nó với "db-" và tạo "db-123456". Rõ ràng, tôi có thể lưu trữ nó với db- và sau đó phân tích cú pháp đó trước khi gọi api, nhưng, tôi chỉ tò mò. – JustLearningAgain

+0

Tôi đang gặp sự cố. Chuỗi được tải trong ứng dụng của tôi đang tải khóa bên phải. Nhưng khóa được tải trong tệp kê khai đang tải chuỗi từ biến thể chính và KHÔNG phải biến thể mà tôi đang biên soạn. Có cách nào để hướng dẫn tệp kê khai tải tệp chuỗi biến thể đúng không? – JustLearningAgain

11

Bạn có thể lưu các chuỗi trong build.gradle quá:

productFlavors { 
    app1 { 
     applicationId "com.acme.app1" 
     resValue "string", "my_app_key", "db-abc" 
    } 

    app2 { 
     applicationId "com.schmoe.app2" 
     resValue "string", "my_app_key", "db-def" 
    } 

    app3 { 
     applicationId "com.yop.app3" 
     resValue "string", "my_app_key", "db-ghi" 
    } 
} 

Và sau đó sử dụng nó như:

<data android:scheme="@string/my_app_key" /> 
+0

Tính năng này hoạt động. Tôi sẽ bỏ phiếu này nhưng câu trả lời từ 323go gần hơn với những gì tôi cần. Nó không đòi hỏi tôi phải có giá trị ở 2 nơi. Cảm ơn đã giúp đỡ. Điều này sẽ giúp tôi với một vài thứ khác mà tôi đang tìm kiếm. – JustLearningAgain

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