VasSonic is a lightweight and high-performance Hybrid framework developed by tencent VAS team, which is intended to speed up the first screen of websites working on Android and iOS platform.

Overview

VasSonic: A Lightweight And High-performance Hybrid Framework

license PRs Welcome wiki

logo

VasSonic is a lightweight and high-performance Hybrid framework developed by tencent VAS team, which is intended to speed up the first screen of websites working on Android and iOS platform. Not only does VasSonic supports the static or dynamic websites which are rendered by server, but it is also compatible with web offline resource perfectly.

VasSonic uses custom url connection instead of original network connection to request the index html, so it can request resource in advance or parallel to avoid waiting for the view initialization. In this parallel case, VasSonic can read and render partial data by WebKit or Blink kernel without spending too much time waiting for the end of data stream.

VasSonic can cache html cleverly according to VasSonic Specification obeyed by client and server. VasSonic Specification specify template and data by inserting different comment anchor, templates are bigger parts of html which stay the same or changed rarely , in contradiction data, which is the smaller and constantly change part of html. According to this, VasSonic request less data by incremental updating templates and data, the websites are faster and feel more like native application. In conclusion, VasSonic effectively enhance the user experience and increase click rate, retention rate and other indicators.

Sonic is called for short in project.

Before VS After Using VasSonic

Pic 1: Before Using VasSonic Pic 2: After Using VasSonic
default mode VasSonic mode

Getting started

Getting started with Android

Getting started with iOS

Getting started with Java

Getting started with Node.js

Getting started with PHP

Getting started with React

Demo Downloads

  1. Here are the latest sample demo for Android and iOS.

Support

Any problem?

  1. Learn more from the following sample.
    Android sample
    iOS sample
    Java sample
    Node.js sample
    PHP sample
    React sample

  2. Read the following source code
    Android source code
    iOS source code
    Java source code Node.js source code
    PHP source code
    React source code

  3. Read the wiki for help.

  4. Contact us or scan QR code for help.
    QR code

Contributing

For more information about contributing issues or pull requests, see our VasSonic Contributing Guide.

License

VasSonic is under the BSD license. See the LICENSE file for details.

The End

If you are interested in VasSonic, don't forget to STAR it.

VasSonic's mission is MAKING WEB MUCH BETTER!

Thank you for reading ~

Comments
  • how to change default language !?

    how to change default language !?

    Hello,

    First of all, thank you for such an amazing library for web services. I would like to know how to change the default language of VasSonic WebViewClient (or WebSetting..). All contents in the website that loaded from VasSonic are rendered as Chinese. I have tried to dig into the wiki but haven't found a way yet.

    Please let me know if there is a way or workaround for this. Thanks in advance!

    opened by hnguyenworkstation 9
  • 把android demo中的地址改为别的地址,加载速度没有变快

    把android demo中的地址改为别的地址,加载速度没有变快

    https://github.com/Tencent/VasSonic/issues/239 承接之前的问题哈(不知道为啥被关闭了)

    @marlonlu 但是这边都是拦截demo url来进行试验的。没有由服务端结算返回数据块(内容是直接返回整个页面),这边也开了local server模式。应该会由客户端计算并执行局部刷新吧? 这边拦截后 ,无论是demo url 还是自己的 test url(返回的内容相同) 都是Cache-Control: max-age=0 image

    但是测试的结果(上一个回复https://github.com/Tencent/VasSonic/issues/239 )对比很奇怪,能解答下疑问吗?

    可以的话可否通过别的方式聊下?qq或者微信

    opened by whytry-GAR 8
  • sonic初始化异常

    sonic初始化异常

    What steps will reproduce the problem? 该问题的重现步骤是什么? 1.打开页面的时候出现 sonicSession为空 几率性事件,多为第一次点击 if (null != sonicSession) { sonicSession.bindClient(sonicSessionClient = new SonicSessionClientImpl()); } else { // this only happen when a same sonic session is already running, // u can comment following codes to feedback as a default mode. // throw new UnknownError("create session fail!"); Toast.makeText(this, "create sonic session fail!", Toast.LENGTH_LONG).show(); } 2:我在这里的操作是出现初始化异常的时候将错误信息抛出,导致程序奔溃

    What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么? 什么情况会造成这种初始化异常,当让我想拦截这种异常,使程序稳定

    What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上? 使用的是2.0版本,在1.0版本好像没出现过,android系统

    Please provide any additional information below. 如果有的话,请在下面提供更多信息。

    opened by hongqinghe 8
  • 请问加载速度的提升是服务端、移动端、前端共同优化的成果?

    请问加载速度的提升是服务端、移动端、前端共同优化的成果?

    我是移动端的,最近打算优化Webview的加载速度,然后下了demo体验了一把。demo中的加载速度和离线加载,确实速度快了不少。如果将demo中的url改成我自己项目的url,速度还是一样的。那么问题来了,提升加载速度是服务端、客户端、前段一起优化的结果?如果只是客户端做优化,服务端不参与,能达到demo中的效果吗?

    opened by WJLollipop 7
  • 无法加载页面

    无法加载页面

    What steps will reproduce the problem? 该问题的重现步骤是什么? 1.url有效,但是加载不出来,直接显示一个空白页面 2. 3.

    What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么? 期待看见加载页面,实际看见一个空白页面

    What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上? compile 'com.tencent.sonic:sdk:2.0.0' android

    Please provide any additional information below. 如果有的话,请在下面提供更多信息。

    opened by qianzhihe86 6
  • iOS  打包时候报错

    iOS 打包时候报错

    引入Sonic.framework,打包的时候报错 Sonic.framework/Sonic(SonicUitil.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64

    opened by peakerWu 6
  • create sonic session fail!

    create sonic session fail!

    What steps will reproduce the problem? 该问题的重现步骤是什么?

    1. 创建得时候总是说url不合法
    2. sonicSession = SonicEngine.getInstance().createSession(infoUrl, sessionConfigBuilder.build());

    What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么?

    What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上?

    Please provide any additional information below. 如果有的话,请在下面提供更多信息。

    opened by lhb11 5
  • nginx 开启 gzip 时会使用 Weak Etag,sonic_diff 不能兼容

    nginx 开启 gzip 时会使用 Weak Etag,sonic_diff 不能兼容

    VasSonic 方案没有兼容 Weak Etag。 当使用 nginx 开启 gzip 特性时,snoic_differ 写入的 etag 会被 nginx 修改为 Weak Etag。 在 WEB 服务不自己处理 gzip,而是依赖前端负载均衡或者 CDN 服务提供 gzip 时,VasSonic 将难以集成。 而很多WEB项目是使用 nginx 做前端负载均衡处理 gzip 的,在使用 VasSonic 时困难较大。

    考虑可行的方法:

    1. 完全不使用 gzip 进行 sonic 请求
    2. 需要集成的 WEB 服务修改为自己处理 gzip
    3. 避开 Etag 响应头使用自定义响应头
    4. 更新 VasSonic 使兼容 Weak Etag

    想请问开源项目参与者们的意见。

    opened by zeratul1 5
  • vivo x9 plus

    vivo x9 plus

    09-30 14:19:23.690 25141-25141/? E/VivoSystemReflect: Failure register UserProfilingManager java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:430) at android.app.VivoSystemReflect$7.createService(VivoSystemReflect.java:461) at android.app.SystemServiceRegistry$CachedServiceFetcher.getService(SystemServiceRegistry.java:860) at android.app.SystemServiceRegistry.getSystemService(SystemServiceRegistry.java:801) at android.app.ContextImpl.getSystemService(ContextImpl.java:1512) at android.content.ContextWrapper.getSystemService(ContextWrapper.java:659) at android.app.Application.getUserProfilingManager(Application.java:328) at android.app.Activity.onResume(Activity.java:1291) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1276) at android.app.Activity.performResume(Activity.java:6955) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3514) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3577) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2840) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1558) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6295) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:790) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) at org.json.JSONTokener.nextValue(JSONTokener.java:94) at org.json.JSONObject.(JSONObject.java:156) at org.json.JSONObject.(JSONObject.java:173) at com.vivo.services.userprofiling.UserProfilingManager.getApplicationConfig(UserProfilingManager.java:79) at com.vivo.services.userprofiling.UserProfilingManager.(UserProfilingManager.java:40) at java.lang.reflect.Constructor.newInstance0(Native Method)  at java.lang.reflect.Constructor.newInstance(Constructor.java:430)  at android.app.VivoSystemReflect$7.createService(VivoSystemReflect.java:461)  at android.app.SystemServiceRegistry$CachedServiceFetcher.getService(SystemServiceRegistry.java:860)  at android.app.SystemServiceRegistry.getSystemService(SystemServiceRegistry.java:801)  at android.app.ContextImpl.getSystemService(ContextImpl.java:1512)  at android.content.ContextWrapper.getSystemService(ContextWrapper.java:659)  at android.app.Application.getUserProfilingManager(Application.java:328)  at android.app.Activity.onResume(Activity.java:1291)  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1276)  at android.app.Activity.performResume(Activity.java:6955)  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3514)  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3577)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2840)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1558)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6295)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:790)  09-30 14:19:23.733 25141-25164/? I/Adreno: QUALCOMM build : aa39516, I97e7dfc697 Build Date : 04/17/17 OpenGL ES Shader Compiler Version: XE031.09.00.04 Local Branch : mybranch25849061 Remote Branch : quic/LA.BR.1.3.6.c2_rb2.12 Remote Branch : NONE Reconstruct Branch : NOTHING 09-30 14:19:23.740 25141-25164/? I/OpenGLRenderer: Initialized EGL, version 1.4

    opened by liangdas 5
  • php sdk里的getallheaders函数兼容性问题

    php sdk里的getallheaders函数兼容性问题

    PHP Fatal error: Call to undefined function getallheaders() getallheaders这个函数在非Apache服务器下,如nginx或FastCGI模式下可能不存在,可以考虑$_SERVER['HTTP_XXX']方式获取request header。

    opened by legendtired 5
  • Optimize speed of spliting template and data from html data

    Optimize speed of spliting template and data from html data

    We use - replaceOccurrencesOfString:withString:options:range: to replace tag. But it's not efficient and much time cost. It needs to scan whole file to replace.

    I run a performance test to compare the new(my PR) and old(framework currently implementation), split the framework demo main.html 1000 times, results are below:

    Used main.html: image

    Used main.html but has 10 data tag: image

    Used main.html but has 20 data tag: image

    Used main.html but has 20 data tag, and double file size: image

    Conclusion: Along with increasing of data tag or file size, the old method's cost is increasing much higher. For the last test, new split method is at least 6ms faster than old way.

    opened by zhongwuzw 4
  • JCenter service is shutting down

    JCenter service is shutting down

    What steps will reproduce the problem? JFrog, the company that maintains the JCenter artifact repository used by many Android projects, made JCenter a read-only repository on March 31st, 2021. According to the announcement, JCenter will allow downloads of existing artifacts indefinitely.

    Developers who publish artifacts on JCenter should migrate their packages to a new host, such as Maven Central.

    Developers who use dependencies from JCenter will need to find the new location of updated versions of those dependencies.

    What is the expected output? What do you see instead? Migrate to another repository (JitPack / Maven Central / etc)

    What version of the product are you using? On what operating system? Version 3.1.0 (Android)

    Please provide any additional information below. https://developer.android.com/studio/build/jcenter-migration https://blog.gradle.org/jcenter-shutdown

    opened by nauhalf 0
  • Android 放一会再进去或者退出应用重进,又需要重新加载js等资源

    Android 放一会再进去或者退出应用重进,又需要重新加载js等资源

    What steps will reproduce the problem? 该问题的重现步骤是什么?

    1. 退出应用等一会再进,或者退出webview所处activity等几分钟再开

    What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么? 每次都能和第二次打开时间差不多,实际是等待时间稍微过长之后再打开就需要重新加载js等资源 What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上? 3.1.0 Android

    Please provide any additional information below. 如果有的话,请在下面提供更多信息。

    opened by chjif 0
  • create sonic session fail!

    create sonic session fail!

    What steps will reproduce the problem? 该问题的重现步骤是什么? 打开h5,初始化

    What is the expected output? What do you see instead? 期待正常加载,但是 E/SonicSdk_SonicEngine: lookupSession error:sessionId(sonic-demo-master_17c366930dd58745454b8b84ba5fbe74) is expired. E/SonicSdk_SonicEngine: internalCreateSession error:sessionId(sonic-demo-master_17c366930dd58745454b8b84ba5fbe74) is running now.

    What version of the product are you using? On what operating system? 3.1.0版本上。Android10.0

    Please provide any additional information below. 如果有的话,请在下面提供更多信息。

    opened by wlmxj 1
  • 代码不维护更新了吗

    代码不维护更新了吗

    What steps will reproduce the problem? 该问题的重现步骤是什么?

    1. 导入项目无法使用
    2. 版本太低

    What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么?

    What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上?

    Please provide any additional information below. 如果有的话,请在下面提供更多信息。

    opened by Zhangzhenguo-git 1
  • SDK能否添加oom捕获?

    SDK能否添加oom捕获?

    应用线上异常抛出OOM "java.lang.OutOfMemoryError: Failed to allocate a 183879624 byte allocation with 25165824 free bytes and 159MB until OOM, target footprint 394818520, growth limit 536870912 at java.lang.StringFactory.newStringFromBytes(StringFactory.java:225) at java.lang.StringFactory.newStringFromBytes(StringFactory.java:61) at java.io.ByteArrayOutputStream.toString(ByteArrayOutputStream.java:245) at com.tencent.sonic.sdk.SonicServer.readServerResponse(SonicServer.java:399) at com.tencent.sonic.sdk.SonicServer.getResponseStream(SonicServer.java:315) at com.tencent.sonic.sdk.StandardSonicSession.handleFlow_FirstLoad(StandardSonicSession.java:343) at com.tencent.sonic.sdk.SonicSession.handleFlow_Connection(SonicSession.java:749) at com.tencent.sonic.sdk.SonicSession.runSonicFlow(SonicSession.java:567) at com.tencent.sonic.sdk.SonicSession.access$100(SonicSession.java:54) at com.tencent.sonic.sdk.SonicSession$2.run(SonicSession.java:524) 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:929) " "java.lang.OutOfMemoryError: Failed to allocate a 180720840 byte allocation with 45394656 free bytes and 43MB until OOM, max allowed footprint 536870912, growth limit 536870912 at libcore.util.CharsetUtils.toUtf8Bytes(Native Method) at java.lang.String.getBytes(String.java:896) at java.lang.String.getBytes(String.java:925) at com.tencent.sonic.sdk.SonicUtils.getSHA1(SonicUtils.java:680) at com.tencent.sonic.sdk.SonicServer.separateTemplateAndData(SonicServer.java:441) at com.tencent.sonic.sdk.SonicServer.getTemplate(SonicServer.java:358) at com.tencent.sonic.sdk.SonicSession.doSaveSonicCache(SonicSession.java:1027) at com.tencent.sonic.sdk.SonicSession$1.handleMessage(SonicSession.java:477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:198) at android.os.HandlerThread.run(HandlerThread.java:65)

    SDK版本是3.1.0版本

    机型在oppo Android 8.1.0机型和荣耀 android 10和小米android10上出现过

    opened by 1mf2 0
Releases(3.1.1)
  • 3.1.1(Apr 24, 2019)

    Android & iOS Release Note support custom eTag from Server iOS: https://github.com/Tencent/VasSonic/pull/307 Android: https://github.com/Tencent/VasSonic/pull/283 fix some bug :https://github.com/Tencent/VasSonic/pull/302

    Android & iOS 更新公告 eTag字段支持Server更改设置 iOS: https://github.com/Tencent/VasSonic/pull/307 Android: https://github.com/Tencent/VasSonic/pull/283

    修复一些小bug,详情看 https://github.com/Tencent/VasSonic/pull/302

    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Mar 27, 2018)

    V3.0.0 Release Note

    Java Server V1.0 release

    Android and iOS

    1 [Feature]: iOS dispatch a log event instead of writing log directly, so the programmer can decide whether to show log or not. https://github.com/Tencent/VasSonic/commit/69c4e34c8ac84ceced0b85d68573a9491570d065 2 [Feature]: iOS add Sonic event statistics, so the programmer can receive different Sonic state notification. https://github.com/Tencent/VasSonic/commit/cfd982f363b9e5705036cabc061a1a705453b329 3 [bug] : fix ConcurrentModificationException and NPE when URLConnection try getHeaders. https://github.com/Tencent/VasSonic/commit/d64415fd73f6ab449d2d437e7169fd3c08fd0384 4 [bug] fix SonicServer SEGV_ACCERR crash https://github.com/Tencent/VasSonic/commit/dec262480b33aae67e82188e7023ad8237d6e132

    V3.0.0 更新公告

    Java 后台 1.0版本正式发布

    Android and iOS

    1【特性】:iOS把日志打印修改成一个统计事件类型,以便开发者决定是否需要输出log https://github.com/Tencent/VasSonic/commit/69c4e34c8ac84ceced0b85d68573a9491570d065 2【特性】:iOS增加Sonic各种状态下的事件回调,以便开发者可以监听Sonic的不同状态。https://github.com/Tencent/VasSonic/commit/cfd982f363b9e5705036cabc061a1a705453b329 3【bug】:Android 修复获取HTTP 头部时出现并发修改错误的bug https://github.com/Tencent/VasSonic/commit/d64415fd73f6ab449d2d437e7169fd3c08fd0384 4 【bug】: iOS修复 SonicServerSEGV_ACCERR crash https://github.com/Tencent/VasSonic/commit/dec262480b33aae67e82188e7023ad8237d6e132

    Source code(tar.gz)
    Source code(zip)
    sample-debug.apk(2.01 MB)
    SonicSample.ipa(187.28 KB)
  • 3.0.0-beta(Feb 9, 2018)

    V3.0.0-beta Release Note

    1 [Feature]: iOS dispatch a log event instead of writing log directly, so the programmer can decide whether to show log or not. https://github.com/Tencent/VasSonic/commit/69c4e34c8ac84ceced0b85d68573a9491570d065 2 [Feature]: iOS add Sonic event statistics, so the programmer can receive different Sonic state notification. https://github.com/Tencent/VasSonic/commit/cfd982f363b9e5705036cabc061a1a705453b329 3 [bug] : fix ConcurrentModificationException and NPE when URLConnection try getHeaders. https://github.com/Tencent/VasSonic/commit/d64415fd73f6ab449d2d437e7169fd3c08fd0384

    V3.0.0-beta 更新公告 1【特性】:iOS把日志打印修改成一个统计事件类型,以便开发者决定是否需要输出log https://github.com/Tencent/VasSonic/commit/69c4e34c8ac84ceced0b85d68573a9491570d065 2【特性】:iOS增加Sonic各种状态下的事件回调,以便开发者可以监听Sonic的不同状态。https://github.com/Tencent/VasSonic/commit/cfd982f363b9e5705036cabc061a1a705453b329 3【bug】:Android 修复获取HTTP 头部时出现并发修改错误的bug https://github.com/Tencent/VasSonic/commit/d64415fd73f6ab449d2d437e7169fd3c08fd0384

    Source code(tar.gz)
    Source code(zip)
    sample-debug.apk(2.01 MB)
    SonicSample.ipa(1.24 MB)
  • 3.0.0-alpha(Jan 12, 2018)

    V3.0.0-alpha Release Note 1 [Feature] : Support SonicSession reload mode. Web can refresh current sonic session without quit and reopen. 2 [Feature] : Support SonicSession Preload Link mode. SonicSession will send request of sub resource before kernel render when the response of SonicServer contain url list which need to be preloaded. 3 [Feature] : Support React

    V3.0.0-alpha 更新公告 1 【特性】:添加SonicSession reload功能,支持页面内使用SonicSession刷新 2【特性】:添加SonicServer preload link功能,当Sonic Server返回需要预加载的子资源url时,Sonic框架会在渲染之前提前拉取子资源url 3【特性】:添加Sonic-React扩展

    Source code(tar.gz)
    Source code(zip)
    sample-debug.apk(2.01 MB)
    SonicSample.ipa(177.16 KB)
  • 2.0.0(Dec 7, 2017)

    V2.0.0 Release Note: 1 [Feature] Support LocalServer mode. LocalServer means app can use SonicSdk without any Sonic Node.js or PHP Server. 2 [Feature]: Support custom request and response HTTP header. 3 [Feature]: Use HTTP Header (Cache-Control) to manage lifetime of sonic cache. 4 [Feature]: Support other encoding, such as GBK or GB2312. 5 [optimize]: App can manage the file size of Sonic cache. 6 [optimize]: Use Sqlite instead of SP to manage Sonic cache. 7 [optimize]: The Sonic Session Id (_sonic_id) won't be appended to url. 8 [optimize]: Fix the crash and bug reported from Issues.

    Bug Fix: 1 [Android-bug] Fix Sonic still send request in FirstLoad mode when server return Cache-Offline: http https://github.com/Tencent/VasSonic/commit/023988dc2a4adc7364c7b75104836765fcc1be15 2 [Android-bug] Fix Website can't receive callback when Cache-Offline is store. https://github.com/Tencent/VasSonic/commit/09e1992759007ce703aa23270d13669df1e82fb6 3 [Android-bug] Fix some NPE Crash in 2.0 alpha version. https://github.com/Tencent/VasSonic/commit/824eee60afa6e28671a6c32a06c1820a6885559f 4 [Android-bug] Fix LocalServer replace template tag with htmlsha1 by mistake https://github.com/Tencent/VasSonic/commit/b264102532245f6204a11dfeb5b1f4ed0867e714 5 [Android-bug]: Fix NPE when server has been closed asynchronous. https://github.com/Tencent/VasSonic/commit/2f708e63532a7d095993c6ac98d1f87f13bead4f 6 [iOS-bug] Fix CachedResonseHeaders cann't be updated in right way https://github.com/Tencent/VasSonic/commit/407b700e260131198d012359ff0f28d8bb711458 7 [iOS-bug] Fix LocalServer can't work when server return 304 response. https://github.com/Tencent/VasSonic/commit/eeca012ec4792d707b68212524b48279a0dfe22d 8 [iOS-bug] : Fix the first load data bridge error https://github.com/Tencent/VasSonic/commit/f72e036b8dc01fd48d80bcc1f38d8bf3bb47bc68

    V2.0.0 更新公告: 1.【特性】支持纯终端模式,在该模式下无需前后端配合亦可完成秒开; 2.【特性】支持自定义请求头和自定义响应头; 3.【特性】支持Cache-Control来控制缓存生命周期; 4.【特性】支持非utf-8编码; 5.【优化】支持管理缓存文件占用空间; 6.【优化】使用Sqlite替代SP管理缓存配置信息; 7.【移除】移除在URL中主动添加_sonic_id字段; 8.【优化】修复Issues里的crash跟bug.

    bug 修复: 1.【Android-Bug】修复当首次请求,服务器返回容灾字段 Cache-Offline : http时依然走Sonic请求的bug 2.【Android-Bug】修复当服务器返回Cache-Offline : store时,页面偶现无法接收终端回调的bug 3.【Android-Bug】修复alpha发现的空指针问题 4.【Android-Bug】修复LocalServer模式下会错误替换服务器返回的template tag的bug 5.【Android-Bug】修复多线程下偶现的server为空的bug 6.【iOS-Bug】修复 CachedResonseHeaders 无法更新的bug 7.【iOS-Bug】修复 http 304状态下无法使用LocalServer的bug 8.【iOS-Bug】修复首次回调给前端页面错误数据的bug

    Source code(tar.gz)
    Source code(zip)
    sample-debug.apk(2.00 MB)
    SonicSample.ipa(161.32 KB)
  • 2.0.0-beta(Nov 24, 2017)

    V2.0.0-beta Release Note: 1 [Android-bug] Fix Sonic still send request in FirstLoad mode when server return Cache-Offline: http https://github.com/Tencent/VasSonic/commit/023988dc2a4adc7364c7b75104836765fcc1be15 2 [Android-bug] Fix Website can't receive callback when Cache-Offline is store. https://github.com/Tencent/VasSonic/commit/09e1992759007ce703aa23270d13669df1e82fb6 3 [Android-bug] Fix some NPE Crash in 2.0 alpha version. https://github.com/Tencent/VasSonic/commit/824eee60afa6e28671a6c32a06c1820a6885559f 4 [Android-bug] Fix LocalServer replace template tag with htmlsha1 by mistake https://github.com/Tencent/VasSonic/commit/b264102532245f6204a11dfeb5b1f4ed0867e714 5 [iOS-bug] Fix CachedResonseHeaders cann't be updated in right way https://github.com/Tencent/VasSonic/commit/407b700e260131198d012359ff0f28d8bb711458 6 [iOS-bug] Fix LocalServer can't work when server return 304 response. https://github.com/Tencent/VasSonic/commit/eeca012ec4792d707b68212524b48279a0dfe22d

    V2.0.0-beta 更新公告: 1.【Android-Bug】修复当首次请求,服务器返回容灾字段 Cache-Offline : http时依然走Sonic请求的bug 2.【Android-Bug】修复当服务器返回Cache-Offline : store时,页面偶现无法接收终端回调的bug 3.【Android-Bug】修复alpha发现的空指针问题 4.【Android-Bug】修复LocalServer模式下会错误替换服务器返回的template tag的bug 5.【iOS-Bug】修复 CachedResonseHeaders 无法更新的bug 6.【iOS-Bug】修复 http 304状态下无法使用LocalServer的bug

    Source code(tar.gz)
    Source code(zip)
    sample-debug.apk(2.00 MB)
    SonicSample.ipa(161.32 KB)
  • 2.0.0-alpha(Nov 6, 2017)

    V2.0.0-alpha Release Note: 1 [Feature] Support LocalServer mode. LocalServer means app can use SonicSdk without any Sonic Node.js or PHP Server. 2 [Feature]: Support custom request and response HTTP header. 3 [Feature]: Use HTTP Header (Cache-Control) to manage lifetime of sonic cache. 4 [Feature]: Support other encoding, such as GBK or GB2312. 5 [optimize]: App can manage the file size of Sonic cache. 6 [optimize]: Use Sqlite instead of SP to manage Sonic cache. 7 [optimize]: The Sonic Session Id (_sonic_id) won't be appended to url. 8 [optimize]: Fix the crash and bug reported from Issues.

    V2.0.0-alpha 更新公告: 1.【特性】支持纯终端模式,在该模式下无需前后端配合亦可完成秒开; 2.【特性】支持自定义请求头和自定义响应头; 3.【特性】支持Cache-Control来控制缓存生命周期; 4.【特性】支持非utf-8编码; 5.【优化】支持管理缓存文件占用空间; 6.【优化】使用Sqlite替代SP管理缓存配置信息; 7.【移除】移除在URL中主动添加_sonic_id字段; 8.【优化】修复Issues里的crash跟bug.

    Source code(tar.gz)
    Source code(zip)
    sample-debug.apk(2.00 MB)
    SonicSample.ipa(262.51 KB)
  • 1.1.1(Sep 27, 2017)

  • 1.1.0(Sep 25, 2017)

  • 1.0(Aug 8, 2017)

Owner
Tencent
Tencent
A data-binding Presentation Model(MVVM) framework for the Android platform.

PLEASE NOTE, THIS PROJECT IS NO LONGER BEING MAINTAINED. As personal time contraints, I am currently unable to keep up. Please use official android da

RoboBinding open source 1.3k Dec 9, 2022
Small Warp Plugin developed in Kotlin

Warps A small warps plugin for the 1.17 SMP. Minecraft 1.17 Spigot Contributing Install Java 16 Fork this repo Clone your fork Make your changes Use h

MenuDocs 6 Feb 19, 2022
Source++ is an open-source live coding platform. Add breakpoints, logs, metrics, and tracing to live production applications

Source++ is an open-source live coding platform. Add breakpoints, logs, metrics, and distributed tracing to live production software in real-time on-d

Source++ 40 Dec 14, 2022
A lightweight, good expandability Android library used for displaying different pages like loading, error, empty, timeout or even your custom page when you load a page

中文 | English LoadSir ?? ?? LoadSir是一个高效易用,低碳环保,扩展性良好的加载反馈页管理框架,在加载网络或其他数据时候,根据需求切换状态页面, 可添加自定义状态页面,如加载中,加载失败,无数据,网络超时,如占位图,登录失效等常用页面。可配合网络加载框架,结合返回 状态

KingJA 3.3k Dec 21, 2022
kotlin-core - A full framework for making Android apps. Based on Anko and Kotson.

kotlin-core This package is not Android-specific, and can be used across platforms. However, for a good example of use in Android, take a look at kotl

Lightning Kite 36 Oct 3, 2022
A small, yet full-featured framework that allows building View-based Android applications

Conductor A small, yet full-featured framework that allows building View-based Android applications. Conductor provides a light-weight wrapper around

BlueLine Labs 3.9k Jan 6, 2023
LiteOrm is a fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line of code efficiently.

#LiteOrm:Android高性能数据库框架 A fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line

马天宇 1.5k Nov 19, 2022
Rosie is an Android framework to create applications following the principles of Clean Architecture.

Rosie The only way to make the deadline—the only way to go fast—is to keep the code as clean as possible at all times. — Robert C. Martin in Clean Cod

Karumi 1.8k Dec 28, 2022
A full-featured framework that allows building android applications following the principles of Clean Architecture.

EasyMVP A powerful, and very simple MVP library with annotation processing and bytecode weaving. EasyMVP eliminates the boilerplate code for dealing w

null 1.3k Nov 19, 2022
Android Plugin Framework

Android Plugin Framework This project is pre-mature and may be changed very frequently. Introduction Android Plugin Framework (APF) aims to providing

Umeng Limited 322 Nov 17, 2022
MVVM framework for Android

RoboMVVM - MVVM Framework For Android RoboMVVM is an open source library that facilitates the use of the MVVM pattern in Android apps. The MVVM patter

Debdatta Basu 55 Nov 24, 2020
🔥 Android component-based routing framework

README-CN Latest version module krouter-core krouter-compiler krouter-annotation krouter-plugin version Features 支持通过路由获取intent 支持方法注解,通过路由调用方法 支持给fra

Jiaming Gu 6 Jun 24, 2022
🔪 AOP development framework implemented through *Annotation + ASM + Gradle Transform API* for Android🤖

?? AOP development framework implemented through *Annotation + ASM + Gradle Transform API* for Android??

Pumpkin 325 Nov 22, 2022
UltimateAndroid is a rapid development framework for developing your apps

UltimateAndroid Version:0.10.2 UltimateAndroid is a rapid development framework for developing apps Master branch: Dev branch: V0.7.0 Ui Demo screensh

MarshalChen 2.1k Dec 26, 2022
A framework for hook java methods.

Legend Projects are out of date, plese move to: Whale Hook What is Legend? Legend is a Hook framework for Android Development, it allows you to Hook J

Lody 1.6k Dec 15, 2022
A modern framework for full stack web apps in Kotlin

Kobweb is an opinionated Kotlin framework for creating websites and web apps, built on top of Web Compose and inspired by Next.js and Chakra UI.

Varabyte 425 Jan 8, 2023
A plugin system that runs like a browser, but instead of load web pages, it load apk plugins which runs natively on Android system.

Android Dynamic Loader Android Dynamic Loader is a plugin system. The host application is like a browser, but instead of load web pages, it load plugi

Tu Yimin 1.4k Dec 28, 2022
Nucleus is an Android library, which utilizes the Model-View-Presenter pattern to properly connect background tasks with visual parts of an application.

Nucleus Deprecation notice Nucleus is not under develpment anymore. It turns out that Redux architecture scales way better than MVP/MVI/MVVM/MVxxx and

Konstantin Mikheev 2k Nov 18, 2022
The most complete and powerful data-binding library and persistence infra for Kotlin 1.3, Android & Splitties Views DSL, JavaFX & TornadoFX, JSON, JDBC & SQLite, SharedPreferences.

Lychee (ex. reactive-properties) Lychee is a library to rule all the data. ToC Approach to declaring data Properties Other data-binding libraries Prop

Mike 112 Dec 9, 2022