使用android maven插件重命名包

时间:2013-03-01 16:50:52

标签: android maven ant

像往常一样,当你试图制作非标准的东西时,你会坚持使用maven。

我目前正在尝试重命名Android应用程序的主应用程序包,以便能够从同一来源运行不同的品牌应用程序。

我们正在使用android maven插件,实现它非常困难。

  1. 我首先尝试使用 renameManifestPackage 配置。但这看起来不像我的预期。因为现在无法安装apk。

  2. 我尝试了第二种方法。在初始化阶段运行ant以从sources / resources / tests / AndroidManifest.xml重命名包。如果我跳过测试,这几乎可以工作。如果不是因为Robolectric使用原始清单而失败。如果我不复制清单并在原始文件中进行替换,一切正常,但我现在已经修改了AndroidManifest,这会破坏我的工作环境(IDE)。

  3. 有没有人有明确的步骤如何重命名包并仍然有工作环境?

    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。

2 个答案:

答案 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)

防止AndroidManifest.xml被覆盖

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