6

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

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

我们正在使用 android maven 插件,很难完成它。

  1. 我正在尝试第一种简单的方法 - 使用renameManifestPackage配置。但这看起来不是我所期望的。因为现在无法安装生成的 apk。

  2. 我尝试了第二种方法。在初始化阶段运行 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。

4

2 回答 2

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>
于 2013-03-04T13:44:08.253 回答
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

于 2014-01-22T12:55:41.317 回答