这几天研究了一下APP的自动更新,并且是那种最方便使用的,找了一下,找到一个框架:updatefun,使用方法比较简单,记录一下使用方法和遇到的问题。
1、使用Android studio 的依赖方式:
dependencies {
compile 'cn.hugeterry.updatefun:updatefun:1.6.0'
}
版本好像到1.8.6以上了
2、在APP的的activity 代码的onCreate()中加上以下语句进行初始化(需要注意的是,代码放在 setContentView()方法的后面):
UpdateKey.API_TOKEN = "写上你 fir.im 账号的 API_TOKEN";
UpdateKey.APP_ID = "写上 APP 的应用 ID";
//下载方式:
//UpdateKey.DialogOrNotification=UpdateKey.WITH_DIALOG;通过 Dialog 来进行下载
//UpdateKey.DialogOrNotification=UpdateKey.WITH_NOTIFITION;通过通知栏来进行下载(默认)
UpdateFunGO.init(this);
在onCreate()里写完初始化后,就到onResume()和onStop()加入一下代码:
@Override
protected void onResume() {
super.onResume();
UpdateFunGO.onResume(this);
}
@Override
protected void onStop() {
super.onStop();
UpdateFunGO.onStop(this);
}
代码到处就算写完
4、fir.im 账号的 API_TOKEN和应用ID的来历
首先在fir.im 上注册账号,在fir.im的个人头像下找到API token,生成即可,记录下来,备用。
接着可在fir.im上传自己的未完成APP,获取到应用ID,记录下来备用。
5、获取完API token和 APP id后,就可以在代码用填入,并修改APP的版本号,打包上传到fir.im 。
defaultConfig {
applicationId "com.example."
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
resValue "string", "updatefun_provider_file_authorities", "com.example.administrator.myapplication.fileprovider"
}
6、手动更新的方法:
updatefun 的版本需 1.8.4 以上,依赖和加入token,APP id,参考上面
在需要调用更新的时候调用代码:
UpdateFunGO.manualStart(this);
和onResume()和onStop()的代码:
@Override
protected void onResume() {
super.onResume();
UpdateFunGO.onResume(this);
}
@Override
protected void onStop() {
super.onStop();
UpdateFunGO.onStop(this);
}
7、在使用中遇到的问题
在安卓7.0 中由于新特性,报出: android.os.FileUriExposedException这个异常
android.os.FileUriExposedException: file:///sdcard/UpdateFun/com.example.administrator.myapplication.apk exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
at android.net.Uri.checkFileUriExposed(Uri.java:2346)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8971)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8932)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517)
at android.app.Activity.startActivityForResult(Activity.java:4252)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
at android.app.Activity.startActivityForResult(Activity.java:4210)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
at android.app.Activity.startActivity(Activity.java:4549)
at android.app.Activity.startActivity(Activity.java:4517)
at cn.hugeterry.updatefun.module.Download.installApk(Download.java:193)
at cn.hugeterry.updatefun.module.Download.access$900(Download.java:36)
at cn.hugeterry.updatefun.module.Download$1.handleMessage(Download.java:88)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:792)
折腾了挺久,没搞定,后面就用了个笨方法,将 targetSdkVersion 降低到22,发现可以正常安装,勉为其难的用着吧。