我一直在編程一個Android應用程序一段時間,我們想要發佈兩個版本相互有微小的變化。一旦我們將應用程序分成兩個應用程序,我就擔心應用程序的維護(我在一個應用程序中更改某個內容,而不更新其他應用程序)。什麼是最好的方式去做這件事?我正在考慮爲每個版本的應用程序創建兩個svn分支,並讓人們對trunk進行更改,然後將它們合併到分支中?這是最簡單和有效的解決方案嗎?管理兩個相似的應用程序
回答
瞭解如何使用螞蟻。
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>
您需要根據自己的情況調整它。
有沒有添加某種功能切換到應用程序的方法?也許應該在應用程序的配置中生活,或者將基於用戶身份驗證打開/關閉正確的功能集?
這樣,你有一個代碼基和兩組功能(假設這兩個應用程序之間存在公共代碼)。
我還沒有完成android或移動開發,但已經在Java web開發中成功地使用了這種技術,我們根據系統的用戶打開了具有不同功能的相同應用程序。
我會避免把它分成兩個不同的代碼庫。它只是引入了更多的開銷在維護你。
這對於Android開發來說並不適用。有時你需要有不同的清單文件,並且沒有辦法爲此使用配置文件。 – 2011-12-21 21:40:53
Ted - 正如我上面所說的,我沒有任何移動開發經驗,所以不確定不同的配置是否是一個可行的解決方案......但我認爲我會提供它,以防萬一。 – 2011-12-21 21:52:26
最好的方法是將大部分代碼放在一個庫項目中。然後根據需要在圖書館中創建儘可能多的項目作爲薄薄的單板。例如,我們可以爲Android Market和Amazon Appstore構建單獨的應用程序。 (我們使用許可代碼對於前者,而不是後者;艙單需略有不同;對於鏈接返回到市場應用,我們需要不同的URL對各個市場;等等)
- 1. 管理相同GAE應用程序的兩個實例
- 2. 管理幾個類似的應用程序設置
- 3. iPhone - 兩個相同的應用程序
- 4. 兩個管理員爲一個應用程序
- 5. 管理兩個特定於設備的應用程序
- 6. 在一個應用程序中管理兩種用戶
- 7. 應用程序洞察API管理的類似分析功能?
- 8. 開發類似於Windows資源管理器的應用程序
- 9. 如何在類似地圖的應用程序上管理ManipulationDelta?
- 10. 用於管理兩個相關數據源的管理界面
- 11. 在兩個應用程序之間存儲和管理文件?
- 12. 在bitbucket和linode上管理兩個應用程序
- 13. 如何管理兩個opencart應用程序
- 14. 從另一個應用程序管理iPhone應用程序
- 15. 管理Android應用程序
- 16. Salesforce:應用程序管理
- 17. 應用程序管理
- 18. 管理權限2個應用程序
- 19. 管理多個框架應用程序
- 20. 管理App Store上幾個非常類似的應用程序的發佈
- 21. 使用Visual Studio管理同一個應用程序的兩個開發版本
- 22. 從一個項目構建兩個類似的應用程序
- 23. Java - 確定兩個訪問者是否相似(基於Web的應用程序)
- 24. 管理我的應用程序的應用程序?
- 25. 應用程序管理器中的Android應用程序標題
- 26. 如何在類似代理的netty應用程序中管理請求
- 27. PCF - Pivotal應用程序管理器 - 將相同的URL路由到不同版本的相同應用程序。
- 28. 兩個應用程序加載相同的.NET程序集:相同的實例?
- 29. 使用相同的代碼庫管理多個Web應用程序
- 30. 當我有兩個Android應用程序相似時,下載意圖碰撞
好的,在我的AndroidManifest中,我將絕對名稱包含在活動中(而不是'LoginActivity',它是'com.android.something.LoginActivity'),並且工作正常!但是,我將如何去修復R.java文件。我希望它的基礎包名稱像com.android.something而不是com.android.something.somethingelse。你知道如何做到這一點,或者可以將我鏈接到ant文檔,瞭解如何做到這一點?謝謝! – 2012-01-04 17:33:49
我更新了答案(最後),包含一些關於做這件事情的內容。 – dskinner 2012-01-04 18:59:16
謝謝!對它做了一些修改,但它似乎在工作!再次感謝! – 2012-01-04 20:09:12