我正在为我的项目进行构建过程。本质上我想建立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)
-
选择项目并为旧的包名做一个
file search
并替换为新的包名。(这将取代项目文件中所有旧的包名) -
右键单击
package --> Refactor --> Rename
。替换为新的包名。这将取代包配置。(如果您在第一步之前这样做,并且如果您有
.YourActivity
,而不是整个包名(com.project.package.name.YourActivity
)在你的舱单上申报;可能会导致错误) -
再次选择项目并进行文件搜索。这一次,如果您使用的是
AndroidAnnotations
,那么它将显示带注释的文件,并且用新的包名替换这里将替换其导入。
注意:如果您使用自己的插件或库与旧的包名,您可能必须确保它在子pom.xml
中是相同的,因为它也将被替换。
希望这有助于…!:)编程快乐…!