Giter Site home page Giter Site logo

azhon / appupdate Goto Github PK

View Code? Open in Web Editor NEW
2.2K 43.0 322.0 37.24 MB

Android App update library. Android版本更新库,简单、轻量、可随意定制

License: Apache License 2.0

Java 18.75% Kotlin 80.99% Shell 0.26%
android easy java app-update

appupdate's Introduction

appupdate's People

Contributors

azhon avatar thinhbuzz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

appupdate's Issues

可以动态切换下载Url吗

有多个下载Url,Apk因为部分Url错误或者url被墙导致下载出错,需要切换其他可用Url地址
现在测试重新调用setApkUrl(newUul).download();无响应

是否可添加多语言支持

作者你好,在使用你的框架时发现所有提示都是中文,若是项目需要支持国际化,体验就不是很好,是否后续能提供文字的设置呢

强制更新的bug

如果我是强制更新,当下载完,跳转到安装页面,我点取消,返回app,自带的dialog还在界面上,去掉不了

大佬,报这个错,咋整

java.lang.NoSuchMethodError: No direct method <init>(Landroid/content/Context;Ljava/lang/String;)V in class Landroid/support/v4/app/NotificationCompat$Builder; or its super classes (declaration of 'android.support.v4.app.NotificationCompat$Builder' appears in /data/app/m.hongle-eb4iQYSondALfZoq2Pqoxg==/base.apk!classes14.dex)

如何判断版本

请问一下 你是如何判断系统版本的?code?还是name? 我试过把你的代码code和name改为100 但是还是进行了下载,,,,

调用方法使用不当,导致空指针

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.azhon.appupdate.config.UpdateConfiguration.isEnableLog()' on a null object reference
at com.azhon.appupdate.utils.LogUtil.(LogUtil.java:26)
at com.azhon.appupdate.utils.LogUtil.e(LogUtil.java:36) 
at com.azhon.appupdate.manager.DownloadManager.checkParams(DownloadManager.java:348) 
at com.azhon.appupdate.manager.DownloadManager.download(DownloadManager.java:291)

.setBreakpointDownload(false) 的情况下,(len = is.read(buffer) 超时 (仅在华为设备出现)

设置.setBreakpointDownload(false)
使用华为mate20 Android9.0测试,07-31 17:19:18.847 20724-21548/com.azhon.app W/System.err: java.net.SocketTimeoutException: timeout (试过好几款华为手机都是这样,比如honor 8 Android 8.0)

又试过努比亚,三星,小米,oppo等其他手机 没有该问题,另,修改超时时间为30s+也没用,一样会超时。
全部错误日志如下:
07-31 17:19:18.847 20724-21548/com.azhon.app W/System.err: java.net.SocketTimeoutException: timeout
07-31 17:19:18.848 20724-21548/com.azhon.app W/System.err: at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:212)
at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:261)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:215)
07-31 17:19:18.849 20724-21548/com.azhon.app W/System.err: at com.android.okhttp.okio.RealBufferedSource.read(RealBufferedSource.java:50)
at com.android.okhttp.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:393)
at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:371)
at java.io.InputStream.read(InputStream.java:101)
at com.azhon.appupdate.manager.HttpDownloadManager.fullDownload(HttpDownloadManager.java:187)
07-31 17:19:18.850 20724-21548/com.azhon.app W/System.err: at com.azhon.appupdate.manager.HttpDownloadManager.access$500(HttpDownloadManager.java:36)
at com.azhon.appupdate.manager.HttpDownloadManager$2.run(HttpDownloadManager.java:85)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
07-31 17:19:18.851 20724-21548/com.azhon.app W/System.err: Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:144)
at com.android.okhttp.okio.Okio$2.read(Okio.java:136)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
... 10 more

部分机型报错

android.os.FileUriExposedException: file:///storage/emulated/0/.sh/update/download exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1958)
at android.net.Uri.checkFileUriExposed(Uri.java:2356)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10523)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10477)
at android.app.PendingIntent.getActivity(PendingIntent.java:345)
at android.app.PendingIntent.getActivity(PendingIntent.java:307)
at cn.shihuo.modulelib.views.service.UpdateService.e(UpdateService.java:298)
at cn.shihuo.modulelib.views.service.UpdateService.a(UpdateService.java:35)
at cn.shihuo.modulelib.views.service.UpdateService$b.a(UpdateService.java:457)
at cn.shihuo.modulelib.views.service.UpdateService$b.onPostExecute(UpdateService.java:330)



程序已经有provider设置请问该怎么兼容

你好,我程序已经有



请问这个和你要设置的该怎么兼容在一起,现在这个只能用其中一个 <--! android:authorities="${applicationId}" 这个值必须与DownloadManager中的authorities一致(不设置则为应用包名)-->




第四步:资源文件res/xml/file_paths_public.xml内容

你的demo有点问题

在我的机器上,你的demo如果先点击了使用版本内置的对话框更新,再点击另外两个按钮,就会出现出现版本库内置的对话框,这个非常的古怪

在android 8.0下更新app,一直在震动

DownloadManager manager = DownloadManager.getInstance(getApplicationContext());

    UpdateConfiguration configuration=new UpdateConfiguration();
    configuration.setOnDownloadListener(new OnDownloadListener() {
        @Override
        public void start() {
            LogUtil.d("开始下载");
            NotificationUtil.showNotification(getApplicationContext(),R.mipmap.launcher,getResources().getString(R.string.app_name),"开始下载");
        }

        @Override
        public void downloading(int max, int progress) {
            max =max/1024/1024;//单位转换MB
            progress =progress/1024/1024;//单位转换MB
            LogUtil.d("下载进度"+progress*100/max);
            NotificationUtil.showProgressNotification(getApplicationContext(),R.mipmap.launcher,getResources().getString(R.string.app_name),"正在下载在新版本",max,progress);
        }

        @Override
        public void done(File apk) {
            LogUtil.d("下载完成");
            NotificationUtil.showDoneNotification(getApplicationContext(),R.mipmap.launcher,getResources().getString(R.string.app_name),"下载完成,点击安装","com.soarswing.braindoctor.braindoctor",apk);
        }

        @Override
        public void error(Exception e) {
            LogUtil.d("下载失败");
            NotificationUtil.showErrorNotification(getApplicationContext(),R.mipmap.launcher,getResources().getString(R.string.app_name),"下载失败,点击重试");
        }
    });
    manager.setApkName(String.format(
            "%s_%s.apk", getResources().getString(R.string.app_name),
            info.getVersionName()))
            .setApkUrl(info.getUrl())
            .setDownloadPath(Environment.getExternalStorageDirectory() + "/AppUpdate")
            .setSmallIcon(R.mipmap.launcher)
            //可设置,可不设置
            .setConfiguration(configuration)
            .download();

调用了您发的工具类,在震动模式下还是一直响个不停 我已经设置了 //IMPORTANCE_LOW:默认关闭声音与震动、IMPORTANCE_DEFAULT:开启声音与震动
channel = new NotificationChannel(Constant.DEFAULT_CHANNEL_ID, Constant.DEFAULT_CHANNEL_NAME,
NotificationManager.IMPORTANCE_LOW);关闭声音与振动了,请问这是怎么回事,是我设置的不对吗?

内存泄露

使用过程中有DownloadManager内存泄露

可不可以不用设置SmallIcon

我是一名 ReactNative 开发人员,项目被我用到 rn 里面了。被我封装成Rn 的 android组件了,这里强制要求设置图标,可不可以自动读取主工程的图标。
另外setApkName可不可以自己设置成包名,也不用设置。

下载速度太慢了

试了几个apk文件,下载速度一直都是在200k/s左右,不是网络问题,宽带是100M的

建议

可以写个详细的文档,方便更多人使用,例举使用方法和如何扩展

通知栏的百分比进度没有显示,demo和依赖库都一样,是我姿势不对吗

@OverRide
public void downloading(int max, int progress) {
LogUtil.i(TAG, "max: " + max + " --- progress: " + progress);
if (showNotification) {
//优化通知栏更新,减少通知栏更新次数
int curr = (int) (progress / (double) max * 100.0);
if (curr != lastProgress) {
lastProgress = curr;
String downloading = getResources().getString(R.string.start_downloading);
NotificationUtil.showProgressNotification(this, smallIcon, downloading, "", max, progress);
}
}
if (listener != null) {
listener.downloading(max, progress);
}
}


int curr = (int) (progress / (double) max * 100.0);
if (curr != lastProgress)
这个地方的百分比转换是不是有点小问题

java.lang.NoSuchMethodError

java.lang.NoSuchMethodError: No direct method <init>(Landroid/content/Context;Ljava/lang/String;)V in class Landroid/support/v4/app/NotificationCompat$Builder; or its super classes (declaration of 'android.support.v4.app.NotificationCompat$Builder'
这是报错信息,定位问题是 return new NotificationCompat.Builder(context, channelId)
我项目使用26编译的,但是这个地方总提示是25的V4包

设置签名问题

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.bajiaoxing.intermediaryrenting.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths_public" />
    </provider>

        mManager.setApkName("appupdate"+TimeUtils.getCurrentTimeInLong()+".apk")
                .setApkUrl(data.getFile())
                .setAuthorities("com.bajiaoxing.intermediaryrenting.fileprovider")

我加了.fileprovider之后并修改authorities ,每次下载完之后都会提示三四部报错。 去掉又可以正常下载

通知栏提示下载失败

用我们自己的地址下载失败。用您的测试地址就没问题.这个地址应该怎么搞啊?

通知栏提示下载失败

我直接下载的时候失败,在HttpDownloadManager 的类中的 getContentLength方法中con得到的是null,链接放到浏览器中是可以下载的

setAuthorities()问题

我现在用的就是最新版本的,android:authorities="com.orange.fun.almost.FileProvider"由于是这边设置的是这样,代码这是这样设置的setAuthorities(getActivity().getPackageName())是不是这里android:authorities="com.orange.fun.almost"改成包名就没问题了

解析包出错

2019-05-22 14:37:53.491 31851-32114/com.yao W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:229)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.azhon.appupdate.manager.HttpDownloadManager.getContentLength(HttpDownloadManager.java:228)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.azhon.appupdate.manager.HttpDownloadManager.breakpointDownload(HttpDownloadManager.java:94)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.azhon.appupdate.manager.HttpDownloadManager.access$300(HttpDownloadManager.java:36)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at com.azhon.appupdate.manager.HttpDownloadManager$2.run(HttpDownloadManager.java:82)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2019-05-22 14:37:53.492 31851-32114/com.yao W/System.err: at java.lang.Thread.run(Thread.java:784)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:661)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:539)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:605)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:418)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:339)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:208)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:404)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:375)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:224)
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: ... 20 more
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-05-22 14:37:53.493 31851-32114/com.yao W/System.err: ... 33 more

报错:java.lang.RuntimeException

错误日志:
java.lang.RuntimeException:Unable to start service com.azhon.appupdate.service.DownloadService@8e37359 with Intent { hwFlg=0x100 cmp=com.xx.xx/com.azhon.appupdate.service.DownloadService }: java.lang.RuntimeException: 请先调用 getInstance(Context context) !

未在依赖库外调用getInstance()方法

ArrayIndexOutOfBoundsException

D/AppUpdate.DownloadService: 应用的通知栏开关状态:已打开
E/AppUpdate.DownloadService: error: java.lang.ArrayIndexOutOfBoundsException: src.length=2048 srcPos=0 dst.length=65536 dstPos=37342 length=-37342

java.lang.ArrayIndexOutOfBoundsException: src.length=2048 srcPos=0 dst.length=65536 dstPos=37342 length=-37342
    at java.lang.System.arraycopy(Native Method)
    at com.azhon.appupdate.io.BufferedRandomAccessFile.writeAtMost(BufferedRandomAccessFile.java:347)
    at com.azhon.appupdate.io.BufferedRandomAccessFile.write(BufferedRandomAccessFile.java:319)
    at com.azhon.appupdate.manager.HttpDownloadManager.breakpointDownload(HttpDownloadManager.java:132)
    at com.azhon.appupdate.manager.HttpDownloadManager.access$400(HttpDownloadManager.java:36)
    at com.azhon.appupdate.manager.HttpDownloadManager$2.run(HttpDownloadManager.java:83)
    at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:784)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.