腾讯珊瑚接入流程和开发指引

接入流程+开发工作量+开发接口


X5 内核SDK

<h3>1. 基础配置</h3> <h5>1.1 SDK接入</h5> <p>jar包方式集成 您可将官网下载的jar包复制到您的App的libs目录,并且通过Add As Library的方式集成TBS SDK Gradle方式集成 您可以在使用SDK的模块的dependencies中添加引用进行集成:</p> <pre><code class="language-java">api 'com.tencent.tbs.tbssdk:sdk:43939'</code></pre> <h4>1.2 权限配置</h4> <p>为了保障内核的动态下发和正常使用,您需要在您的AndroidManifest.xml增加如下权限:</p> <pre><code class="language-java">&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt;</code></pre> <h4>1.3 混淆配置</h4> <p>为了保障X5功能的正常使用,您需要在您的proguard.cfg文件中添加如下配置:</p> <pre><code class="language-java">-dontwarn dalvik.** -dontwarn com.tencent.smtt.** -keep class com.tencent.smtt.** { *; } -keep class com.tencent.tbs.** { *; }</code></pre> <h4>1.4 异常上报配置</h4> <p>为了提高合作方的webview场景稳定性,及时发现并解决x5相关问题,当客户端发生crash等异常情况并上报给服务器时请务必带上x5内核相关信息。x5内核异常信息获取接口为:</p> <pre><code class="language-java">com.tencent.smtt.sdk.WebView.getCrashExtraMessage(context)。以bugly日志上报为例:  UserStrategy strategy = new UserStrategy(appContext);   strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {     public Map&lt;String, String&gt; onCrashHandleStart( int crashType, String errorType, String errorMessage, String errorStack) { LinkedHashMap&lt;String, String&gt; map = new LinkedHashMap&lt;String, String&gt;(); String x5CrashInfo = com.tencent.smtt.sdk.WebView.getCrashExtraMessage(appContext); map.put("x5crashInfo", x5CrashInfo); return map;     }     @Override     public byte[] onCrashHandleStart2GetExtraDatas( int crashType, String errorType, String errorMessage, String errorStack) { try { return "Extra data.".getBytes("UTF-8"); } catch (Exception e) { return null; }     }   });   CrashReport.initCrashReport(appContext, APPID, true, strategy);</code></pre> <h4>1.5 首次初始化冷启动优化</h4> <p>TBS内核首次使用和加载时,ART虚拟机会将Dex文件转为Oat,该过程由系统底层触发且耗时较长,很容易引起anr问题,解决方法是使用TBS的 ”dex2oat优化方案“。</p> <h5>(1). 设置开启优化方案</h5> <p>// 在调用TBS初始化、创建WebView之前进行如下配置 HashMap map = new HashMap(); map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true); map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true); QbSdk.initTbsSettings(map);</p> <h5>(2). 增加Service声明</h5> <p>在AndroidManifest.xml中增加内核首次加载时优化Service声明。</p> <p>该Service仅在TBS内核首次Dex加载时触发并执行dex2oat任务,任务完成后自动结束。</p> <pre><code class="language-java">&lt;service android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService" android:label="dexopt" android:process=":dexopt" &gt; &lt;/service&gt;</code></pre> <h3>2. WebView接入</h3> <h4>2.1 包名替换</h4> <p>下载 SDK jar 包放到工程的libs目录下,将源码和XML里的系统包和类替换为SDK里的包和类,具体对应如下:</p> <table> <thead> <tr> <th>系统内核</th> <th>SDK内核</th> </tr> </thead> <tbody> <tr> <td>android.webkit.ConsoleMessage</td> <td>com.tencent.smtt.export.external.interfaces.ConsoleMessage</td> </tr> <tr> <td>android.webkit.CacheManager</td> <td>com.tencent.smtt.sdk.CacheManager(deprecated)</td> </tr> <tr> <td>android.webkit.CookieManager</td> <td>com.tencent.smtt.sdk.CookieManager</td> </tr> <tr> <td>android.webkit.CookieSyncManager</td> <td>com.tencent.smtt.sdk.CookieSyncManager</td> </tr> <tr> <td>android.webkit.CustomViewCallback</td> <td>com.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback</td> </tr> <tr> <td>android.webkit.DownloadListener</td> <td>com.tencent.smtt.sdk.DownloadListener</td> </tr> <tr> <td>android.webkit.GeolocationPermissions</td> <td>com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback</td> </tr> <tr> <td>android.webkit.HttpAuthHandler</td> <td>com.tencent.smtt.export.external.interfaces.HttpAuthHandler</td> </tr> <tr> <td>android.webkit.JsPromptResult</td> <td>com.tencent.smtt.export.external.interfaces.JsPromptResult</td> </tr> <tr> <td>android.webkit.JsResult</td> <td>com.tencent.smtt.export.external.interfaces.JsResult</td> </tr> <tr> <td>android.webkit.SslErrorHandler</td> <td>com.tencent.smtt.export.external.interfaces.SslErrorHandler</td> </tr> <tr> <td>android.webkit.ValueCallback</td> <td>com.tencent.smtt.sdk.ValueCallback</td> </tr> <tr> <td>android.webkit.WebBackForwardList</td> <td>com.tencent.smtt.sdk.WebBackForwardList</td> </tr> <tr> <td>android.webkit.WebChromeClient</td> <td>com.tencent.smtt.sdk.WebChromeClient</td> </tr> <tr> <td>android.webkit.WebHistoryItem</td> <td>com.tencent.smtt.sdk.WebHistoryItem</td> </tr> <tr> <td>android.webkit.WebIconDatabase</td> <td>com.tencent.smtt.sdk.WebIconDatabase</td> </tr> <tr> <td>android.webkit.WebResourceResponse</td> <td>com.tencent.smtt.export.external.interfaces.WebResourceResponse</td> </tr> <tr> <td>android.webkit.WebSettings</td> <td>com.tencent.smtt.sdk.WebSettings</td> </tr> <tr> <td>android.webkit.WebSettings.LayoutAlgorithm</td> <td>com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm</td> </tr> <tr> <td>android.webkit.WebStorage</td> <td>com.tencent.smtt.sdk.WebStorage</td> </tr> <tr> <td>android.webkit.WebView</td> <td>com.tencent.smtt.sdk.WebView</td> </tr> <tr> <td>android.webkit.WebViewClient</td> <td>com.tencent.smtt.sdk.WebViewClient</td> </tr> </tbody> </table> <p>需要注意的是:</p> <h5>1)请不要在代码里使用下述写法:</h5> <pre><code class="language-java">import android.*; import android.webkit.*; import android.webkit.WebStorage.*; import android.net.*; import android.net.http.*;</code></pre> <h5>2)除了源码里需要把相关的包名和类名进行替换,布局xml里的声明也需要替换,例如:</h5> <pre><code class="language-java">&lt;com.tencent.smtt.sdk.WebView android:id="@+id/forum_context" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="5dp" android:paddingRight="5dp" /&gt;</code></pre> <p>请确保将所有的相关class的包名均按照上述规则替换,以免造成类型强转crash、cookie 设置失败等问题发生。</p> <p>Tips:您可使用工具进行批量扫描和替换,将脚本放置于根目录并执行脚本即可。下载地址:</p> <p>shell版本:<a href="http://res.imtt.qq.com/TES/checkqbsdk.zip">http://res.imtt.qq.com/TES/checkqbsdk.zip</a> Windows版本:<a href="http://res.imtt.qq.com/TES/TBSSdk_windows.zip">http://res.imtt.qq.com/TES/TBSSdk_windows.zip</a></p> <h3>3 文件接入</h3> <h4>3.1 支持格式</h4> <p>TBS已提供9种主流文件格式的本地打开,如果您需要使用更高级的能力请使用QQ浏览器打开文件</p> <p>接入TBS可支持打开文件格式:doc、docx、ppt、pptx、xls、xlsx、pdf、txt、epub 调用QQ浏览器可打开:rar(包含加密格式)、zip(包含加密格式)、tar、bz2、gz、7z(包含加密格式)、doc、docx、ppt、pptx、xls、xlsx、txt、pdf、epub、chm、html/htm、xml、mht、url、ini、log、bat、php、js、lrc、jpg、jpeg、png、gif、bmp、tiff 、webp、mp3、m4a、aac、amr、wav、ogg、mid、ra、wma、mpga、ape、flac</p> <h4>3.2 接口介绍</h4> <pre><code class="language-java">public static int openFileReader( Context context, String filePath, HashMap&lt;String, String&gt; extraParams, ValueCallback&lt;String&gt; callback )</code></pre> <h5>(1)此方法在Qbsdk类下</h5> <h5>(2)调用之后,优先调起 QQ 浏览器打开文件。如果没有安装 QQ 浏览器,在 X5 内核下调起简版 QB 打开文 件。如果使用的系统内核,则调起文件阅读器弹框。</h5> <h5>(3)暂时只支持本地文件打开</h5> <p>context: 调起 miniqb 的 Activity 的 context。此参数只能是 activity 类型的 context,不能设置为 Application 的 context。 filePath: 文件路径。格式为 android 本地存储路径格式,例如:/sdcard/Download/xxx.doc. 不支持 file:/// 格式。暂不支持在线文件。 extraParams: miniqb 的扩展功能。为非必填项,若无需特殊配置,默认可传入null。扩展功能参考“文件功能定制” ValueCallback: 提供 miniqb 打开/关闭时给调用方回调通知,以便应用层做相应处理,您可以在出现以下回调时结束您的进程,节约内存占用。主要回调值如下:</p> <pre><code class="language-java">filepath error TbsReaderDialogClosed default browser fileReaderClosed</code></pre> <p>返回值:</p> <pre><code class="language-java">1:用 QQ 浏览器打开 2:用 MiniQB 打开 3:调起阅读器弹框 -1:filePath 为空 打开失败 </code></pre> <pre><code class="language-java">public static void closeFileReader(Context context)</code></pre> <p>主动关闭文件打开ui,并清理相应内存占用。</p> <h4>3.3 接入示例</h4> <pre><code class="language-java">HashMap&lt;String, String&gt; params = new HashMap&lt;String, String&gt;(); params.put("style", "1"); params.put("local", "true"); params.put("memuData", jsondata); QbSdk.openFileReader(ctx,”/sdcard/xxx.doc”, params,callback);</code></pre>

页面列表

ITEM_HTML