使用Lib文件夹Android/Maven更改包名



我正在为我的项目进行构建过程。本质上我想建立2个应用程序从相同的来源。我使用不同的配置文件来做这件事。

我已经设法配置maven更改应用程序内的名称和url。我需要更改包装,以便两个应用程序可以同时在一个设备上。

我的项目设置了一个父POM和两个子POM

第一个子POM是一个库,它被打包为APKlib。包装为com.companylib

第二个子POM用于创建实际的APK并引用apklib。这被包装为com.company。

目前,我正在使用此配置更改清单中的包装。

               <plugin>
                   <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                   <artifactId>android-maven-plugin</artifactId>
                   <inherited>true</inherited>
                   <configuration>
                       <renameManifestPackage>${manifest_pakage}</renameManifestPackage>
                       <sign>
                           <debug>false</debug>
                       </sign>
                       <zipalign>
                           <verbose>true</verbose>
                           <inputApk>${project.build.directory}/${project.artifactId}.apk</inputApk>
                           <outputApk>${project.build.directory}/${project.artifactId}-signed-aligned.apk
                           </outputApk>
                       </zipalign>
                       <manifest>
                           <debuggable>true</debuggable>
                           <versionCodeAutoIncrement>true</versionCodeAutoIncrement>
                       </manifest>
                       <proguard>
                           <skip>true</skip>
                       </proguard>
                   </configuration>
                   <executions>
                       <execution>
                           <id>manifestUpdate</id>
                           <phase>process-resources</phase>
                           <goals>
                               <goal>manifest-update</goal>
                           </goals>
                       </execution>
                       <execution>
                           <id>alignApk</id>
                           <phase>package</phase>
                           <goals>
                               <goal>zipalign</goal>
                           </goals>
                       </execution>
                   </executions>
               </plugin>

我在我使用的不同配置文件中定义了manifest_package。这在第一个子POM中定义。

两个配置文件构建良好,我可以安装在同一设备上。然而,当roboguice试图引用APKLIB时,我在登台应用程序上遇到了一个问题。我收到以下错误…

 FATAL EXCEPTION: main
 com.google.inject.ConfigurationException: Guice configuration errors:
 1) No implementation for com.companylib.ServerComms.Senders.StringSenderImp annotated with @com.google.inject.name.Named(value=json) was bound.
   while locating com.companylib.ServerComms.Senders.StringSenderImp annotated with @com.google.inject.name.Named(value=json)

所以apklib上的包装似乎没有改变。奇怪的是,我在生产中更换了包装,它工作正常(尽管我用相同的包装替换了它)。

当这样设置时,我应该期望构建改变lib的包装吗?

如果lib与主应用程序有不同的包名是可以的吗?

在我的例子中,我这样做并使其工作。(我正在使用Eclipse IDE)

  1. 选择项目并为旧的包名做一个file search并替换为新的包名。(这将取代项目文件中所有旧的包名)

  2. 右键单击package --> Refactor --> Rename。替换为新的包名。这将取代包配置。

    (如果您在第一步之前这样做,并且如果您有.YourActivity,而不是整个包名(com.project.package.name.YourActivity)在你的舱单上申报;可能会导致错误)

  3. 再次选择项目并进行文件搜索。这一次,如果您使用的是AndroidAnnotations,那么它将显示带注释的文件,并且用新的包名替换这里将替换其导入。

注意:如果您使用自己的插件或库与旧的包名,您可能必须确保它在子pom.xml中是相同的,因为它也将被替换。

希望这有助于…!:)编程快乐…!

最新更新