Я знаю, что это субъективный вопрос, и он, скорее всего, будет закрыт. Но я не знаю, где задать этот вопрос, чтобы получить ответ.
Есть одна небольшая раздражающая вещь с плагином maven для Android - он изменяет исходный файл манифеста, и если вы используете maven в рабочей папке, ваш vcs предлагает вам зафиксировать эти изменения.
Пример: у нас есть несколько сред для запуска. Если я соберу сборку с бета-средой, это изменит имя приложения в AndroidManifest.xml.
Это можно легко решить, скопировав исходный манифест и указав ссылку на копию в плагине Android maven. Но я решил упростить задачу для разработчика, поэтому плагин будет делать это автоматически, за исключением случаев, когда разработчик указывает, что он хочет, чтобы это обновление было выполнено в исходном манифесте.
Было легко изменить функциональность (скопировать файл и заменить свойство, которое сохраняет ссылку на файл), но проблема в том, что мне нужно передать это свойство другим моджо.
Свойство, определенное в абстрактном моджо AbstractAndroidMojo, не имеющем метода execute. И все остальные моджо расширяют этот класс. Определение выглядит так:
/**
* The <code>AndroidManifest.xml</code> file.
*
* @parameter default-value="${project.basedir}/AndroidManifest.xml"
*/
protected File androidManifestFile;
Я последовал этому ответу:
private void updatePluginConfiguration ( String newManifestFileValue )
{
for ( Plugin plugin : project.getBuild().getPlugins() )
{
if ( plugin.getArtifactId().equals( "android-maven-plugin" ) )
{
Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
Xpp3Dom manifestFileParameter = configuration.getChild( "androidManifestFile" );
if ( manifestFileParameter == null )
{
manifestFileParameter = new Xpp3Dom( "androidManifestFile" );
configuration.addChild( manifestFileParameter );
}
manifestFileParameter.setValue( newManifestFileValue );
break;
}
}
}
Но, к сожалению, это не работает. Есть много явных способов заставить его работать, но все они потребуют изменения всех текущих моджо.
Интересно, знает ли кто-нибудь, почему ответ не работает или как заставить его работать.
Код обновленного плагина можно найти здесь: https://github.com/emartynov/maven-android-plugin/tree/keep-android-manifest
Спасибо всем, кто дочитал до конца.