2013-03-21 100 views
0

我正在爲我的項目構建過程。基本上我想從同一個來源構建2個應用程序。我使用不同的配置文件來做到這一點。使用Lib文件夾更改包裝名稱Android/Maven

我已經設法配置maven更改應用程序內的名稱和網址。我還需要更改包裝,因此這兩個應用程序可以同時在設備上。

我的項目設置與父POM和2分孩子的POM

的第一個孩子POM是它打包爲APKlib庫。 packaing是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_pakage。這是在第一個孩子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與主應用程序有不同的軟件包名稱,可以嗎?

回答

0

在我的情況下,我這樣做,並得到它的工作。 (我使用的Eclipse IDE)

  1. 選擇項目和老包的名稱做了file search,並用新的軟件包名稱替換。 (這將替換項目文件中的所有舊包名稱)

  2. 右鍵單擊package --> Refactor --> Rename。替換爲新的軟件包名稱。這將取代軟件包配置。

    (如果你這樣做的第一步之前,如果您有 .YourActivity代替 (com.project.package.name.YourActivity)在你的清單中聲明全包的名稱, 可能會導致錯誤)

  3. 再次選擇該項目並做文件搜索。這次,如果您使用的是AndroidAnnotations,則會顯示帶註釋的文件,並在此處用新包名替換其導入。

注:如果您使用的是自己的插件或使用舊包名稱庫,您可能需要確保它是在孩子pom.xml一樣,它也將被替換。

希望這有助於..! :)快樂編碼..!

相關問題