2011-12-21 24 views
0

我一直在編程一個Android應用程序一段時間,我們想要發佈兩個版本相互有微小的變化。一旦我們將應用程序分成兩個應用程序,我就擔心應用程序的維護(我在一個應用程序中更改某個內容,而不更新其他應用程序)。什麼是最好的方式去做這件事?我正在考慮爲每個版本的應用程序創建兩個svn分支,並讓人們對trunk進行更改,然後將它們合併到分支中?這是最簡單和有效的解決方案嗎?管理兩個相似的應用程序

回答

2

瞭解如何使用螞蟻。

http://developer.android.com/guide/developing/projects/projects-cmdline.html

作爲一個基本的例子,你可以生成命令行build.xml文件,項目目錄裏面

android update project -p ./ 

然後你就可以做一個config目錄,並存儲在那裏的一些項目例如AndroidManifest.xml和您保存在包中的Config.java。與令牌替換某些項目,例如,build-appone.properties可能會讀

config.package_name=com.me.appone 
config.some_var = "foobar" 

和配置會有令牌替換原文像你的文件,Config.java

... 
public static final String FOO_BAR = "@[email protected]"; 
... 

然後,你可以編輯你的build.xml文件並通過運行

添加像這樣

<target name="-configapp"> 
    <copy file="config/Config.java" todir="${source.dir}/com/me/appone/" 
      overwrite="true" encoding="utf-8"> 

      <filterset> 
       <filter token="CONFIG.SOME_VAR" value="${config.some_var}"/> 
      </filterset> 
    </copy> 
</target> 

<target name="release-appone"> 
    <loadproperties srcFile="build-appone.properties"/> 
    <antcall target="-configapp"/> 
    <antcall target="release"/> 
</target> 

自定義目標,那麼你可以建立目標釋放,appone 10

ant release-appone 

或右鍵單擊build.xml,運行方式 - > 2. Ant任務...,然後選擇您的目標並點擊運行按鈕。

更多信息可以在螞蟻的interwebs上找到。

AndroidManifest。xml

值得一提的是,如果您打算將軟件包名稱,版本代碼和版本名稱移動到build.properties文件中,並使用config/AndroidManifest.xml中的過濾器將其複製到根目錄中,則需要以說明不同的軟件包名稱。因此,沒有相對路徑到清單中的活動,您還需要自定義-pre-compile目標以將生成的R.java移動到正確的目錄(基於軟件包名稱),並使用ant regex位修復軟件包名稱R.java,其中 - 預編譯的是一個已經存在的空的目標通過谷歌

預留供您使用更新R.java

要更新R.java,你想覆蓋-pre-編譯目標,找到R.java,移動文件,並使用replaceregexp來適當地編輯文件內的包名稱。您可以查找每個螞蟻通話的文檔以根據您的需求進行定製。以下是一個可能包含錯誤的例子,其中包含有關相關部分的一些評論以供在ant文檔中進一步閱讀

<target name="-pre-compile"> 
    <echo>Fixing R.java</echo> 
    <!-- setup a prop for reuse that points to R.java containing dir --> 
    <property name="config.gen_pkg" value="${gen.absolute.dir}/com/me/dir"/> 

    <!-- this pulls a list of directories and assigns it to a refid via "id" --> 
    <dirset id="config.R_loc" dir="${config.gen_pkg}" includes="*"/> 

    <!-- this takes the refid and pushes it into a usable property --> 
    <property name="prop.R_loc" refid="config.R_loc"/> 

    <!-- now we move the file to where we want --> 
    <move file="${config.gen_pkg}/${prop.R_loc}/R.java" todir="${config.gen_pkg}" 
      overwrite="true" encoding="utf-8"/> 

    <!-- use regex to update the package name --> 
    <replaceregexp file="${config.gen_pkg}/R.java" match="^package com.*$" 
      replace="package com.correct.package.name" byline="true"/> 
</target> 

您需要根據自己的情況調整它。

+0

好的,在我的AndroidManifest中,我將絕對名稱包含在活動中(而不是'LoginActivity',它是'com.android.something.LoginActivity'),並且工作正常!但是,我將如何去修復R.java文件。我希望它的基礎包名稱像com.android.something而不是com.android.something.somethingelse。你知道如何做到這一點,或者可以將我鏈接到ant文檔,瞭解如何做到這一點?謝謝! – 2012-01-04 17:33:49

+1

我更新了答案(最後),包含一些關於做這件事情的內容。 – dskinner 2012-01-04 18:59:16

+0

謝謝!對它做了一些修改,但它似乎在工作!再次感謝! – 2012-01-04 20:09:12

1

有沒有添加某種功能切換到應用程序的方法?也許應該在應用程序的配置中生活,或者將基於用戶身份驗證打開/關閉正確的功能集?

這樣,你有一個代碼基和兩組功能(假設這兩個應用程序之間存在公共代碼)。

我還沒有完成android或移動開發,但已經在Java web開發中成功地使用了這種技術,我們根據系統的用戶打開了具有不同功能的相同應用程序。

我會避免把它分成兩個不同的代碼庫。它只是引入了更多的開銷在維護你。

+0

這對於Android開發來說並不適用。有時你需要有不同的清單文件,並且沒有辦法爲此使用配置文件。 – 2011-12-21 21:40:53

+0

Ted - 正如我上面所說的,我沒有任何移動開發經驗,所以不確定不同的配置是否是一個可行的解決方案......但我認爲我會提供它,以防萬一。 – 2011-12-21 21:52:26

2

最好的方法是將大部分代碼放在一個庫項目中。然後根據需要在圖書館中創建儘可能多的項目作爲薄薄的單板。例如,我們可以爲Android Market和Amazon Appstore構建單獨的應用程序。 (我們使用許可代碼對於前者,而不是後者;艙單需略有不同;對於鏈接返回到市場應用,我們需要不同的URL對各個市場;等等)

相關問題