Как изменить файл AndroidManifest.xml на основе вариантов сборки?

У меня есть приложение с несколькими вариантами сборки. Варианты используются для создания версий одного и того же приложения для разных компаний. Итак, у меня есть несколько разных вариантов, которые создают разные приложения:

  • com.acme.app1
  • com.schmoe.app2
  • com.yop.app3
  • и т.д…

Файл build.gradle обрабатывает это очень хорошо:

productFlavors { app1 { applicationId "com.acme.app1" } app2 { applicationId "com.schmoe.app2" } app3 { applicationId "com.yop.app3" } } 

Вот моя проблема. Я интегрирую Dropbox в свои приложения. Файл AndroidManifest.xml должен быть изменен для каждого варианта, чтобы включить соответствующий ключ приложения (сохраненный в моем строковом файле). Dropbox имеет следующее дополнение к файлу манифеста:

  <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> 

Каждый вариант сборки должен изменить следующую строку:

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

К соответствующему значению для каждого варианта приложения. Другими словами, мне нужно заменить часть указанной строки на основе варианта сборки. Например

App1

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

App2

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

App3

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

Строка одинакова для каждого варианта до текста «db-».

Мне нужно динамически заменить переменную часть строки (значения x) «db-xxxxxx» на строку из моего строкового файла.

Я думаю, что это можно сделать с помощью сценариев градации, но я полный newb с градиентом. ПОМОГИТЕ!

Если вы можете помочь, пожалуйста, будьте очень конкретны в отношении того, что происходит с тех пор, как я СОХРАНИТЬ в файлах gradle и сценариях. Заранее спасибо!

Вы можете сделать это так же, как и изменить имя приложения, используя строковый ресурс. В вашем манифесте включайте:

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

Затем вы добавляете папки ресурсов для разных типов сборки, а в каждом размещаете собственную копию файла ресурсов, например 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> 

Это позволит вам иметь разные ключи API, схемы, имена приложений, значки и т. Д. Для ваших различных вкусов.

Вы также можете сохранить строку в build.gradle :

 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" } } 

И затем используйте его так:

 <data android:scheme="@string/my_app_key" /> 
Intereting Posts
Как ограничить трансляцию своим собственным Android-приложением Как получить идентификатор выбранного элемента в динамическом Spinner? Чтение PDF из приложения Android Добавить горизонтальное и вертикальное отображение в LinearLayout динамически Не удается отправить ожидающее намерение из виджета, SendIntentException Eclipse падает каждый раз, когда я добавляю новый xml-файл в свой раздел меню – Android Нажмите операцию, не работающую в андроид-кнопке после применения анимации перемещения к ней в Android Разница между push-сообщениями GCM и PARSE Динамическое отображение графика в Android Tesseract v3.03 рендеринг PDF с возможностью поиска текста Правильный способ обработки двунаправленного 1: м в Green-DAO GetNeighboringCellInfo () возвращает нулевой список Android onMarkerClick не вызывает после того, как InfoWindow скрывается в GoogleMap Google Maps Android API v2 Ошибка CheckBoxPreference не найдена Как заставить показывать и скрывать виртуальную клавиатуру, если аппаратная клавиатура недоступна?