像往常一样,当你试图制作非标准的东西时,你会坚持使用maven。
我目前正在尝试重命名Android应用程序的主应用程序包,以便能够从同一来源运行不同的品牌应用程序。
我们正在使用android maven插件,实现它非常困难。
我首先尝试使用 renameManifestPackage 配置。但这看起来不像我的预期。因为现在无法安装apk。
我尝试了第二种方法。在初始化阶段运行ant以从sources / resources / tests / AndroidManifest.xml重命名包。如果我跳过测试,这几乎可以工作。如果不是因为Robolectric使用原始清单而失败。如果我不复制清单并在原始文件中进行替换,一切正常,但我现在已经修改了AndroidManifest,这会破坏我的工作环境(IDE)。
有没有人有明确的步骤如何重命名包并仍然有工作环境?
UPD:第1点提到的问题是我使用了错误的包名“devapp”。它应至少包含一个'。'。它是通过使用“my.package.devapp”修复的。安装成功通过。但我现在无法安装新的应用程序,因为:
Can't install because provider name my.package.app (in package my.package.devapp) is already used by my.package.live
我不知道下一步该做什么。深入了解apktool。
答案 0 :(得分:5)
我得到它正在使用3.5.1 android maven插件和配置中的下一行:
<renameManifestPackage>my.package.${environment}</renameManifestPackage>
<manifest>
<providerAuthorities>
<property>
<name>my.package.provider.Provider1</name>
<value>my.package.${environment}</value>
</property>
<property>
<name>my.package.provider.Provider2</name>
<value>my.package.${environment}.media</value>
</property>
</providerAuthorities>
</manifest>
答案 1 :(得分:1)
使用android-maven-plugin更改AndroidManifest.xml文件的一个问题是它可能会错误地提交给您的SCM。
自android-maven-plugin版本3.8.0开始引入了一项新功能,使您有机会将更新的AndroidManifest.xml保存在其他位置。
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.8.2</version>
<extensions>true</extensions>
<configuration>
<renameManifestPackage>com.domain.android${environment}</renameManifestPackage>
<updatedManifestFile>${project.build.directory}/AndroidManifest.xml</updatedManifestFile>
<manifestApplicationLabel>Appname${environment}</manifestApplicationLabel>
<manifest>
<providerAuthorities>
<property>
<name>com.domain.android.vc2.utility.SearchSuggestionsProvider</name>
<value>com.domain.android${environment}.searchsuggestionsprovider</value>
</property>
<property>
<name>com.domain.android.widget.VPWidgetDataProvider</name>
<value>com.domain.android${environment}.widget.provider</value>
</property>
</providerAuthorities>
</manifest>
</configuration>
<executions>
<execution>
<id>update-manifest</id>
<goals>
<goal>manifest-update</goal>
</goals>
</execution>
</executions>
</plugin>
然后元素updatedManifestFile
中的内容将导致使用此名称创建原始AndroidManifest.xml文件的副本并用于更新。当然也适用于apk的包装。
通过将属性环境添加到mvn命令,您可以创建在同一设备上彼此相邻安装的不同版本。
mvn clean package -Denvironment=.beta
此链接解释了这一点以及有关插件属性的更多信息:
http://jayway.github.io/maven-android-plugin/manifest-update-mojo.html#updatedManifestFile