Использовать имя пакета в XML

Я использую Android Studio для создания своего приложения. Я хотел бы использовать gradle buildTypes. Я добавляю суффикс к имени пакета с помощью applicationIdSuffix для изменения имени пакета для типа тестовой сборки.

 buildTypes { debug { runProguard false proguardFile 'proguard-rules.txt' applicationIdSuffix '.dev' versionNameSuffix '-dev' } } 

Можно ли использовать эту информацию в XML-файле. Мой план – изменить тип учетной записи:

 <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType=<<PACKAGE NAME HERE ??>> android:icon="@drawable/icon" android:label="@string/app_name"/> 

Благодаря!

Solutions Collecting From Web of "Использовать имя пакета в XML"

Хотя вы можете использовать ${packageName} чтобы заполнить сгенерированное имя пакета в манифесте:

 <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="${packageName}" android:icon="@drawable/icon" android:label="@string/app_name"/> 

В настоящее время (Android Gradle 0.11) не работает с файлами ресурсов. 🙁

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

  • ЦСИ
    • Debug / res / xml / authenticator.xml (с именем пакета отладки)
    • Main / res / xml / authenticator.xml (с именем пакета по умолчанию)

Вот еще один временный обходной путь до тех пор, пока плагин Android Gradle не получит поддержку для заполнителей в файлах ресурсов .

Вы можете динамически создавать ресурс String через Gradle в случае по defaultConfig и / или buildTypes и / или productFlavors :

 android { defaultConfig { applicationId 'com.foo.bar' resValue 'string', 'package_name', applicationId } } 

Затем вы можете ссылаться на него в файле authenticator.xml же, как и на ярлыке:

 <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="@string/package_name" android:icon="@drawable/icon" android:label="@string/app_name"/> 

Помимо ответа jenzz , я должен был сделать это, так как мой случай точно так же, как вопрос, я добавляю applicationIdSuffix для отладочной версии приложения.

 android { ... defaultConfig { applicationId "..." ... } .... buildTypes { release { ... resValue 'string', 'application_id', android.defaultConfig.applicationId } debug { ... applicationIdSuffix '.debug' resValue 'string', 'application_id', android.defaultConfig.applicationId + applicationIdSuffix } } 

Затем в любом ресурсе xml я могу получить идентификатор приложения следующим образом: @string/application_id

Я только что создал плагин gradle для этого: com.inutilfutil.android-resource-placeholder

Просто включите его, и заполнители будут заменены на всех XML-ресурсах