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~