編輯:Android資訊
在開發應用的過程中,有時候需要比較當前線上版本和正在開發中的版本差異,目前的做法只能是在兩個不同的設備上面安裝線上版本和開發中的版本,因為當前版本在調試過程中會覆蓋舊版本。本文通過使用gradle來構建android應用變種版本,通過配置build type和productFlavors來進行實踐,結果不完全盡如人意,但是提供了同一個程序不同變種在一個設備上共存的一種實踐。
在android的manifest文件中,我們可以配置一個package字段,這個字段主要有兩個作用:
要使同一個應用的不同版本在設備上共存的前提是它們具有不同的applicationID。
要修改applicationId可以通過配置buildTypes中的applicationIdSuffix屬性,起作用是將applicationId設置為package加上你所配置的後綴。此時,面臨的第一個問題是我可能需要對debug版本和線上版本進行區分,比如不同的app圖標,app名字以便在launcher裡面進行區分。此時,productFlavor可以幫上忙,productFlavor提供了替換程序資源文件的功能,只需要在當前項目的src目錄下新建一個flavor目錄,在裡面覆寫資源即可。
到此,我們可以構建出一個用於開發的內測版本,它不會覆蓋手機上已經安裝的線上版本。
通過第二節,我們可以打出一個內測包,但是還是存在如下問題:
針對第一個問題,我目前的解決方案是將actvity聲明的data字段全部引用資源文件,然後通過flavor去為debug版本修改data中的implict_intent_host字段。
<data android:host="@string/implict_intent_host" android:path="/movie" android:scheme="@string/implict_intent_scheme" />
這樣,debug版本的activity的data將會改變,由於之前項目在創建隱式跳轉都集中管理了,那麼只需要修改創建的隱式intent Uri的host部分從資源文件讀取即可。但是這個方案存在一些問題:從第三方(如html5頁面)的跳轉就會失效,因為內測版本的intent host已經不再是公約的版本,這個暫時還沒有解決方案來處理。。。,小小的遺憾
第二個問題好解決,只需要將provider的authorities字段區分一下即可,同樣也會帶來一點點問題,比如一個公司內部存在多個app,之間通過provider來提供數據的話,那麼這個provider應該對於其它app是已知的,修改authorities之後,其他app會找不到這個provider。
以上提到的方法雖然存在一些問題,但是從目前來看只要注意到之前提到的這些內容,應該不會給開發帶來太大的困擾,同時我們最好提供一個默認的flovar,它不定義任何特殊的行為,那麼通過gradle assembleNormalDebug和我們正常打出來的debug包沒有任何差別。
本項目主要對目前 GitHub 上排名前 100 的 Android 開源庫進行簡單的介紹, 至於排名完全是根據GitHub搜索Java語言選擇 (Best Ma
雖然 Go 並不是一門新語言,不過最近兩年來 Go 還是增加了很多有趣的特性,而且使用這門語言的知名項目的數量也在快速的增長。我寫過一篇文章,介紹了 SitePo
之前一直頭痛於沒有辦法在多個程序中共享資源,用作公共類庫的方法也是使用的導出jar再導入的辦法,現在終於初步搞明白了,可算解脫了~,分享出來。 建立公共庫 首先建
模式的定義 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 使用場景 用電源接口做例子,筆