Last updated:
0 purchases
r upgrade
r_upgrade #
中文点此 #
Android and IOS upgrade plugin.
[✔] Jump link mode upgrade
[✔] Android Get user installed android stores.
[✔] Android Get version from android stores(only support GooglePlay、XiaoMi、Tencent)
[✔] Android Jump to store mode upgrade
[✔] Android Download APK using download link
[✔] Monitor download information
[✔] cancel/pause/continue download
[✔] Get download status according to ID
[✔] Install app according to ID
[✔] Get the last download ID (based on the version name and version number)
[✔] Modify the information displayed in the notification bar
[✔] Android hot upgrade
[✔] Android increment upgrade
[✔] IOS Jump to Appstore upgrade according to appid
[✔] IOS Get the current online version of Appstore according to appid
For the development of this plug-in, I haven't had a good meal for a long time. I hope you can click on the sponsor and give a little bit of money. Thank you!
List #
r_upgrade
中文点此
List
Getting Started
1. Use Plugin:
2. Upgrade from your website ( Android or IOS )
Android Platform
1.Get android store list.
2.Get version from android store.
3. App upgrade from store.
4. App upgrade from download link.
1. Add Upgrade Download Listener
2. Upgrade your application
3. Cancel Download
4. Install Apk
5. Pause Download
6. Continue Download
7. Get the last upgrade id
8. Get the download status from id
9. Increment Upgrade
10. Hot Upgrade
Android Platform Notification Bar
IOS Platform
1.Go to the AppStore Upgrade
2.Get the last version form AppStore
LICENSE
Getting Started #
1. Use Plugin: #
add this code in pubspec.yaml
dependencies:
r_upgrade: last version
copied to clipboard
2. Upgrade from your website ( Android or IOS ) #
void upgradeFromUrl()async{
bool isSuccess =await RUpgrade.upgradeFromUrl(
'https://www.google.com',
);
print(isSuccess);
}
copied to clipboard
Android Platform #
1.Get android store list. #
void getAndroidStores() async {
final stores = await RUpgrade.androidStores;
}
copied to clipboard
2.Get version from android store. #
void getVersionName() async {
final versionName = await RUpgrade.getVersionFromAndroidStore(AndroidStore.GOOGLE_PLAY);
}
copied to clipboard
3. App upgrade from store. #
void upgradeFromAndroidStore(){
bool isSuccess = await RUpgrade.upgradeFromAndroidStore(AndroidStore.GOOGLE_PLAY);
print('${isSuccess?'jump success':'jump error'}');
}
copied to clipboard
4. App upgrade from download link. #
make sure your application had this permission and request dynamic permission.
<!--(if you want to upload google store,can not add this permission)-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--(if you want to use silent install,need to add this permission,and app is system app-->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
copied to clipboard
1. Add Upgrade Download Listener
RUpgrade.stream.listen((DownloadInfo info){
///...
});
copied to clipboard
info:
param
desc
(int) id
download id
(int) max_length
download max bytes length (bytes)
(int) current_length
download current bytes length (bytes)
(double) percent
download percent 0-100
(double) planTime
download plan time /s (X.toStringAsFixed(0))
(String) path
download file path
(double) speed
download speed kb/s
(DownloadStatus) status
download status STATUS_PAUSED STATUS_PENDING STATUS_RUNNING STATUS_SUCCESSFUL STATUS_FAILED STATUS_CANCEL
2. Upgrade your application
This upgrade have two part.
useDownloadManager:
true: Use system DownloadManagerto download
advantage:Simple, use system.
Inferiority:can not use http download , can not click the notification pause downloading, can not pause and continue download by network status etc...
support: RUpgrade.stream、install、cancel
false: Use Service download(default use)
advantage:Power, support http/https download, support auto pause and continue download by network status etc..
Inferiority:No bugs found yet. If you find a bug, you are welcome to issue
support: RUpgrade.stream、install、cancel
// [installType] downloaded finish will use install type to install apk.
// [apkName] apk name (such as `release.apk`)
// [notificationVisibility] notification visibility.
// [notificationStyle] download notification show style about content text, only support [useDownloadManager]==false.
// [useDownloadManager] if true will use DownloadManager,false will use my service ,
// if true will no use [pause] , [upgradeWithId] , [getDownloadStatus] , [getLastUpgradedId] methods.
// [upgradeFlavor] you can use [RUpgradeFlavor.normal] , [RUpgradeFlavor.hotUpgrade] , [RUpgradeFlavor.incrementUpgrade] flavor
void upgrade() async {
int id = await RUpgrade.upgrade(
'https://raw.githubusercontent.com/rhymelph/r_upgrade/master/apk/app-release.apk',
apkName: 'app-release.apk', installType: RUpgradeInstallType.normal,);
}
copied to clipboard
New upgraded flavor:(no support use DownloadManager)
enum RUpgradeFlavor {
normal, // full upgrade
hotUpgrade, // hot upgrade
incrementUpgrade, // increment upgrade
}
copied to clipboard
3. Cancel Download
void cancel() async {
bool isSuccess=await RUpgrade.cancel(id);
}
copied to clipboard
4. Install Apk
use download id install
void install() async {
bool isSuccess=await RUpgrade.install(id);
}
copied to clipboard
use file path install
void installByPath(String path) async {
bool isSuccess=await RUpgrade.installByPath(path);
}
copied to clipboard
install type
/// [RUpgrade.upgradeWithId]、[RUpgrade.upgrade]、[RUpgrade.install]、[RUpgrade.installByPath]
enum RUpgradeInstallType {
normal,//normal install
silent,//silent install
none,// not install
}
copied to clipboard
5. Pause Download
void pause() async {
bool isSuccess=await RUpgrade.pause(id);
}
copied to clipboard
6. Continue Download
void pause() async {
bool isSuccess=await RUpgrade.upgradeWithId(id);
/// return true.
/// * if download status is [STATUS_PAUSED] or [STATUS_FAILED] or [STATUS_CANCEL], will restart running.
/// * if download status is [STATUS_RUNNING] or [STATUS_PENDING], nothing happened.
/// * if download status is [STATUS_SUCCESSFUL] , will install apk.
///
/// return false.
/// * if not found the id , will return [false].
}
copied to clipboard
7. Get the last upgrade id
void getLastUpgradeId() async {
int id = await RUpgrade.getLastUpgradedId();
}
copied to clipboard
8. Get the download status from id
void getDownloadStatus()async{
DownloadStatus status = await RUpgrade.getDownloadStatus(id);
}
copied to clipboard
9. Increment Upgrade
1.Download bsdiff to local.
2.Prepare two installation packages, one is the one to be upgraded( old.apk ), an installation package that you need to update( new.apk )
3.Switch to the 'bsdiff' directory downloaded above on the command line, and run the command./bsdiff old.apk new.apk increment.patch
4.Put theincrement.patchUpload to server
5.use RUpgrade.upgrade(...,upgradeFlavor:RUpgradeFlavor.incrementUpgrade)download file
6.use RUpgrade.install(id) install apk.
The code is as follows:
int id;
void incrementUpgrade(){
id = await RUpgrade.upgrade(
'https://mydata-1252536312.cos.ap-guangzhou.myqcloud.com/r_upgrade.patch',
fileName: 'r_upgrade.patch',
useDownloadManager: false,
installType: RUpgradeInstallType.none,
upgradeFlavor: RUpgradeFlavor.incrementUpgrade,
);
}
void install(){
try {
await RUpgrade.install(id);
} catch (e) {
_state.currentState
.showSnackBar(SnackBar(content: Text('failure!')));
}
}
copied to clipboard
10. Hot Upgrade
you can use this id to hot upgrade,but download file is zip. include three file [isolate_snapshot_data]、[kernel_blob.bin]、[vm_snapshot_data].Your can use flutter build bundle generate.
flutter build bundle
copied to clipboard
generate file path form ./build/flutter_assets and packaged into zip.
|- AssetManifest.json
|- FontManifest.json
|- fonts
|- ...
|- isolate_snapshot_data *
|- kernel-blob.bin *
|- LICENSE
|- packages
|- ...
|- vm_snapshot_data *
copied to clipboard
use RUpgrade.upgrade(...,upgradeFlavor:RUpgradeFlavor.hotUpgrade)download file.
download complete you can use download id to hot upgrade
bool isSuccess = await RUpgrade.install(id);
if (isSuccess) {
_state.currentState
.showSnackBar(SnackBar(content: Text('Hot update succeeded, exit the application after 3S, please enter again')));
Future.delayed(Duration(seconds: 3)).then((_){
SystemNavigator.pop(animated: true);
});
}else{
_state.currentState
.showSnackBar(SnackBar(content: Text('Hot update failed, please wait for update package download to complete')));
}
copied to clipboard
At present, the hot update is still in the testing stage, only supporting the change of the flutter code, not supporting the resource file, etc. the author of the plug-in is not responsible for all the consequences caused by the hot update, and the user is responsible for it.
Android Platform Notification Bar #
If you want to customize the content displayed in the download notification bar, you can do so, modify or add files project/android/app/main/res/values/r_upgrade_value.xml,add the following code
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="r_upgrade_download_speech">%.0f kb/s</string>
<string name="r_upgrade_download_planTime">%.0fs left</string>
<string name="r_upgrade_download_finish">Download finished</string>
<string name="r_upgrade_download_paused">Download paused</string>
<string name="r_upgrade_download_failed">Download failed</string>
</resources>
copied to clipboard
And then.When you use upgrade method,you should set the notificationStyle param.
/// Notification show style about content text
enum NotificationStyle {
speechAndPlanTime, // 100kb/s 1s left
planTimeAndSpeech, // 1s left 100kb/s
speech,// 100kb/s
planTime, // 1s left
none, //
}
copied to clipboard
IOS Platform #
1.Go to the AppStore Upgrade #
void upgradeFromAppStore() async {
bool isSuccess =await RUpgrade.upgradeFromAppStore(
'your AppId',//such as:WeChat AppId:414478124
false
);
print(isSuccess);
}
copied to clipboard
2.Get the last version form AppStore #
void getVersionFromAppStore() async {
String versionName = await RUpgrade.getVersionFromAppStore(
'your AppId',//such as:WeChat AppId:414478124
false
);
print(versionName);
}
copied to clipboard
LICENSE #
Copyright 2021 rhymelph
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
copied to clipboard
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.