一款 Android App 升級(jí)庫(kù)

AppUpdate

????前往1.x文檔

你可以通過(guò)它來(lái)升級(jí)你的App。

簡(jiǎn)介

  • 小巧便捷 , 使用方便
  • 自帶強(qiáng)制/非強(qiáng)制性升級(jí)提示框 , 可替換彈框的顏色
  • HttpURLConnection下載 , 不引用額外的庫(kù)
  • 解決三方庫(kù)之間FileProvider沖突問(wèn)題
  • 支持Android 8

??2.x版本??

  • [x] 重構(gòu)API否彩,調(diào)用方式更加簡(jiǎn)單

  • [x] 支持使用自定義彈框

  • [x] 升級(jí)庫(kù)的support依賴(lài)

  • [x] 支持進(jìn)度回調(diào),對(duì)話(huà)框進(jìn)度條,通知欄進(jìn)度條展示

  • [x] 支持后臺(tái)下載

  • [x] 支持強(qiáng)制更新

  • [x] 支持彈出框顏色替換

Gradle引入

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    implementation 'com.github.Loren1994:AndroidUpdate:2.0.0'
}

API

//首先請(qǐng)求你的檢測(cè)更新接口 - 判斷是否更新
new AppUpdateManager.Builder()
                .bind(this) //必須調(diào)用
                .setDownloadUrl(url) //必須設(shè)置
                .setDownloadListener(new UpdateDownloadListener() { //必須設(shè)置
                    @Override
                    public void onDownloading(int process) {
                        Log.d("update", "onProcess: " + process);
                    }

                    @Override
                    public void onDownloadSuccess() {
                        Log.d("update", "下載完成");
                    }

                    @Override
                    public void onDownloadFail(String reason) {
                        Log.d("update", reason);
                    }
                })
                .setUpdateMessage("檢測(cè)到有新的版本,請(qǐng)下載升級(jí).") //自帶彈框顯示的內(nèi)容
                .setShowDialog(true) //是否顯示自帶的彈框
                .setForceUpdate(true) //是否顯示自帶的強(qiáng)制彈框
                .build();

說(shuō)明

庫(kù)中帶有兩種提示框复凳,分為強(qiáng)制性更新框和非強(qiáng)制性更新框辰晕,可通過(guò)setForceUpdate設(shè)置。

若不使用自帶的提示框舔清,可設(shè)置setShowDialog(false)不顯示彈框,則AppUpdateManager可看做只是下載的方法曲初。在這之前加入自己的彈框和頁(yè)面邏輯即可体谒。

替換提示框顏色

<color name="download_indicator_color">XXXX</color>

關(guān)于FileProvider沖突的問(wèn)題

以下用TakePhoto 4.0.3測(cè)試沖突問(wèn)題

TakePhoto庫(kù)的Provider
<provider
   android:name="android.support.v4.content.FileProvider"
   android:authorities="${applicationId}.fileprovider"
   android:grantUriPermissions="true"
   android:exported="false">
   <meta-data
     android:name="android.support.FILE_PROVIDER_PATHS"
     android:resource="@xml/file_paths" />
</provider>
測(cè)試過(guò)程
條件 結(jié)果
app模塊: tools:replace="android:authorities" android:name="android.support.v4.content.FileProvider" update模塊: android:name="android.support.v4.content.FileProvider" ?編譯不通過(guò)
app模塊: tools:replace="android:authorities" android:name="android.support.v4.content.FileProvider" update模塊: android:name=".LorenProvider" ?編譯通過(guò)?TakePhoto調(diào)用崩潰
app模塊: android:name="android.support.v4.content.FileProvider" update模塊: android:name=".LorenProvider" ?編譯不通過(guò)
app模塊: android:name="pers.loren.appupdate.providers.ResolveConflictProvider" update模塊: android:name=".LorenProvider" ?編譯通過(guò)?TakePhoto調(diào)用正常?update庫(kù)正常
app模塊: tools:replace="android:authorities" android:name="android.support.v4.content.FileProvider" update模塊: tools:replace="android:authorities" android:name="android.support.v4.content.FileProvider" ?編譯通過(guò)?TakePhoto調(diào)用崩潰
app模塊: android:name="pers.loren.appupdate.providers.ResolveConflictProvider" update模塊: android:name=".ResolveConflictProvider" ?編譯不通過(guò)
沖突報(bào)錯(cuò)
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute provider#android.support.v4.content.FileProvider@authorities value=(pers.loren.test.app.fileprovider) from AndroidManifest.xml:26:13-68
    is also present at [com.jph.takephoto:takephoto_library:4.0.3] AndroidManifest.xml:19:13-64 value=(pers.loren.test.fileprovider).
    Suggestion: add 'tools:replace="android:authorities"' to <provider> element at AndroidManifest.xml:24:9-32:20 to override.
最終Manifest
<!--app模塊-->
<provider
    android:name="pers.loren.appupdate.providers.ResolveConflictProvider"
    android:authorities="${applicationId}.app.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
       <meta-data
           android:name="android.support.FILE_PROVIDER_PATHS"
           android:resource="@xml/file_paths" />
</provider>

<!--update模塊-->
<provider
    android:name=".LorenProvider"
    android:authorities="${applicationId}.appupdate.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
      <meta-data
           android:name="android.support.FILE_PROVIDER_PATHS"
           android:resource="@xml/file_paths" />
</provider>
最終解決方案

update庫(kù)里采用自定義的fileprovider , app模塊里也需要寫(xiě)provider標(biāo)簽, update模塊提供ResolveConflictProvider以便app模塊使用 , app模塊里也可以自行建立fileprovider類(lèi)

一點(diǎn)總結(jié)

  • 同一App的多個(gè)庫(kù)的provider的name都是android.support.v4.content.FileProvider時(shí)會(huì)引起沖突
  • 上述情況可以通過(guò)寫(xiě)自定義FileProvider解決
  • 同一App不同庫(kù)的provider的name用同一個(gè)自定義FileProvider也會(huì)引起沖突
  • 不同App之間provider的name可以相同 , 但authorities不可以重復(fù),否則后者App不能安裝
  • 三方庫(kù)的Manifest里引入tools , app里也引入了tools , 可能導(dǎo)致merge manifest fail

Tips

  • 如果只引用這一個(gè)帶有provider的庫(kù) , 則app里不需要寫(xiě)provider
  • 如果庫(kù)之間有沖突 , 則參考 最終Manifest
  • build()方法里已判斷ServiceConnection不為null時(shí)首先解綁
  • 可以調(diào)用AppUpdateManager.unbindDownloadService(this)解綁Service

項(xiàng)目地址

GitHub:https://github.com/Loren1994/AndroidUpdate 歡迎star~ issue~

<(?????)>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市臼婆,隨后出現(xiàn)的幾起案子抒痒,更是在濱河造成了極大的恐慌,老刑警劉巖颁褂,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故响,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡颁独,警方通過(guò)查閱死者的電腦和手機(jī)彩届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)誓酒,“玉大人樟蠕,你說(shuō)我怎么就攤上這事】扛蹋” “怎么了寨辩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)歼冰。 經(jīng)常有香客問(wèn)我靡狞,道長(zhǎng),這世上最難降的妖魔是什么隔嫡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任甸怕,我火速辦了婚禮甘穿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕾各。我一直安慰自己扒磁,他們只是感情好庆揪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布式曲。 她就那樣靜靜地躺著,像睡著了一般缸榛。 火紅的嫁衣襯著肌膚如雪吝羞。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天内颗,我揣著相機(jī)與錄音钧排,去河邊找鬼。 笑死均澳,一個(gè)胖子當(dāng)著我的面吹牛恨溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播找前,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼糟袁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了躺盛?” 一聲冷哼從身側(cè)響起项戴,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎槽惫,沒(méi)想到半個(gè)月后周叮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡界斜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年仿耽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片各薇。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡项贺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出得糜,到底是詐尸還是另有隱情敬扛,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布朝抖,位于F島的核電站啥箭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏治宣。R本人自食惡果不足惜急侥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一砌滞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坏怪,春花似錦贝润、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鹏秋,卻和暖如春尊蚁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侣夷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工横朋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人百拓。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓琴锭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衙传。 傳聞我的和親對(duì)象是個(gè)殘疾皇子决帖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,858評(píng)論 25 707
  • 哎呀呀 ,馬上就要面臨找工作了,媛媛心里緊張呀. 作為一個(gè)即將畢業(yè)的Android程序媛,開(kāi)始面臨找工作了,...
    仇諾伊閱讀 4,544評(píng)論 7 59
  • 1.什么是Activity?問(wèn)的不太多古瓤,說(shuō)點(diǎn)有深度的 四大組件之一,一般的,一個(gè)用戶(hù)交互界面對(duì)應(yīng)一個(gè)activit...
    JoonyLee閱讀 5,729評(píng)論 2 51
  • 轉(zhuǎn)自 1. 什么是Activity? 四大組件之一,一般的,一個(gè)用戶(hù)交互界面對(duì)應(yīng)一個(gè)activity setCon...
    joe1632閱讀 1,392評(píng)論 0 7
  • 看ted。這是我2017年目標(biāo)之一腺阳。 開(kāi)始是用小老鼠做實(shí)驗(yàn)落君,發(fā)現(xiàn)那些被媽媽舔的更多撫摸的更多的小老鼠,在它成長(zhǎng)之后...
    韓溪流閱讀 369評(píng)論 0 2