Android在项目中接入腾讯TBS浏览器WebView的教程与注意的地方

腾讯TBS浏览器服务

我们都知道,在Android开发中,经常会用到Webview,而且WebView是出了名的坑的,各种bug。这时候腾讯老哥站出来了,搞了一个TBS浏览器服务这个东西。 说得这么屌,其实就是一个webView控件,然后解析解析网页的内核是他自己做的,叫X5内核(系统原生的WebView用的是WebKit内核),所以我们开发者用的时候,主要就是用这个com.tencent.smtt.sdk.WebView控件

当然这个控件有很多功能,当然也有些要注意的地方。

官网地址:http://x5.tencent.com

1. 特殊功能:

  • 速度快:相比系统webview的网页打开速度有30+%的提升;
  • 省流量:使用云端优化技术使流量节省20+%;
  • 更安全:安全问题可以在24小时内修复;
  • 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
  • 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
  • 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
  • 功能全:在Html5、ES6上有更完整支持;
  • 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
  • 视频和文件格式的支持x5内核多于系统内核
  • 防劫持是x5内核的一大亮点

2. 运行环境

  • 手机ROM版本高于或等于2.2版本
  • 手机RAM大于500M,该RAM值通过手机 /proc/meminfo 文件的MemTotal动态获取

注:如果不满足上述条件,SDK会自动切换到系统WebView,SDK使用者不用关心该切换过程。

3. SDK尺寸指标

  • SDK提供的JAR包约293K

4. 原生和X5 WebView的类对应表

系统内核                                                                                SDK内核

  • android.webkit.ConsoleMessage                  com.tencent.smtt.export.external.interfaces.ConsoleMessage
  • android.webkit.CacheManager                       com.tencent.smtt.sdk.CacheManager(deprecated)
  • android.webkit.CookieManager                      com.tencent.smtt.sdk.CookieManager
  • android.webkit.CookieSyncManager              com.tencent.smtt.sdk.CookieSyncManager
  • android.webkit.CustomViewCallback com.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback
  • android.webkit.DownloadListener                  com.tencent.smtt.sdk.DownloadListener
  • android.webkit.GeolocationPermissions com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback
  • android.webkit.HttpAuthHandler                     com.tencent.smtt.export.external.interfaces.HttpAuthHandler
  • android.webkit.JsPromptResult                      com.tencent.smtt.export.external.interfaces.JsPromptResult
  • android.webkit.JsResult                                   com.tencent.smtt.export.external.interfaces.JsResult
  • android.webkit.SslErrorHandler                      com.tencent.smtt.export.external.interfaces.SslErrorHandler
  • android.webkit.ValueCallback                         com.tencent.smtt.sdk.ValueCallback
  • android.webkit.WebBackForwardList            com.tencent.smtt.sdk.WebBackForwardList
  • android.webkit.WebChromeClient                 com.tencent.smtt.sdk.WebChromeClient
  • android.webkit.WebHistoryItem                      com.tencent.smtt.sdk.WebHistoryItem
  • android.webkit.WebIconDatabase                 com.tencent.smtt.sdk.WebIconDatabase
  • android.webkit.WebResourceResponse     com.tencent.smtt.export.external.interfaces.WebResourceResponse
  • android.webkit.WebSettings                           com.tencent.smtt.sdk.WebSettings
  • android.webkit.WebSettings.LayoutAlgorithm   com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm
  • android.webkit.WebStorage                            com.tencent.smtt.sdk.WebStorage
  • android.webkit.WebView                                 com.tencent.smtt.sdk.WebView
  • android.webkit.WebViewClient                      com.tencent.smtt.sdk.WebViewClient

在APP中集成

1. 导Jar包

去这个网址: http://x5.tencent.com/tbs/sdk.html ,看到Android SDK(完整版) 这个就是Jar包,下载回来放到你项目的lib文件夹,右键add as library即可。

2. 权限

在Manifest添加下面的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

3. 初始化X5内核

在Application里面使用QbSdk.initX5Environment进行初始化X5内核,第一个参数传入context,第二个参数传入PreInitCallback,不需要callback的可以传入null。
initX5Environment内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对App启动性能没有影响,当App后续创建webview 时就可以首次加载x5内核了:

public class BaseApplicatiom extends Application {
 @Override
 public void onCreate() {
 super.onCreate();
 //初始化X5内核
 QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
 @Override
 public void onCoreInitFinished() {
 //x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。
 }
 @Override
 public void onViewInitFinished(boolean b) {
 //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
 Log.e("@@","加载内核是否成功:"+b);
 }
 });
 }
}

4. 使用WebView

然后需要用到WebView的时候,在布局这样子下面这样子写,注意要全路径com.tencent.smtt.sdk.WebView:

<com.tencent.smtt.sdk.WebView
 android:id="@+id/twv_test"
 android:layout_width="match_parent"
 android:layout_height="match_parent"/>

其余使用方法基本和系统的WebView一样,例如js的交互是,也是一样的addJavascriptInterface,所以使用成本还不算高。但是有些是需要注意的,继续看下去:

高级一点的使用

1. 全屏播放视频

页面的Activity需要声明:

android:configChanges="orientation|screenSize|keyboardHidden"

视频为了避免闪屏和透明问题,Activity在onCreate时需要设置:

//这个对宿主没什么影响,建议声明
getWindow().setFormat(PixelFormat.TRANSLUCENT);

在非硬绘手机和声明需要controller的网页上,视频切换全屏和全屏切换回页面内会出现视频窗口透明问题,需要在activity的style进行如下设置:

<!-- 声明为不透明,这个视各app情况所需,不强制需求,如果声明了,对体验更有利 -->
<item name="android:windowIsTranslucent">false</item>。

以下接口禁止(直接或反射)调用,避免视频画面无法显示:

webview.setLayerType()
webview.setDrawingCacheEnabled(true);

2. 输入法

避免输入法界面弹出后遮挡输入光标的问题,所在的Activity添加属性:

android:windowSoftInputMode="stateHidden|adjustResize"

或者 在ActivityonCreate时候代码设置也行:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

3. 自定义UA

UA是什么?
userAgent,用户代理。是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。作用就是告诉网页我这个是什么系统。

如果 app 需要自定义 UA,建议采取在 SDK 默认UA 后追加 app UA 的方式。示例:

//其中APP_NAME_UA是app自定义UA
webSetting.setUserAgentString(webSetting.getUserAgentString() + APP_NAME_UA);

4. 额外的视频播放器

没错,这货还提供了一个视频播放的功能,下面官方的说明:

TBS不仅提供了强大的网页浏览功能,更提供了强大的页面H5视频播放支持,播放器同时支持页面,小窗,全屏播放体验,强大的解码能力,包括mp4,rmvb,flv,avi等26种视频格式支持。

TBS播放器的播放场景不仅局限于H5页面播放,也可以接入一般的视频流链接,比如本地文件,网络的视频流链接。开发者如果想播放一个视频链接,在不自己开发播放器的前提下,一般做法是将视频的播放链接放到一个Intent里面,抛给系统的播放器进行播放,那么当你集成了TBS后,你只需要通过简单的方式接入视频播放调用接口,这样你不需要写任何一句关于播放器的代码,就可以享受一个本地播放器体验,播放视频再不需要Intent来跨App、跨进程的调用了。

第一步,在Manifest添加Activity声明:

<activity
 android:name="com.tencent.smtt.sdk.VideoActivity"
 android:configChanges="orientation|screenSize|keyboardHidden"
 android:exported="false"
 android:launchMode="singleTask"
 android:alwaysRetainTaskState="true">
 <intent-filter>
 <action android:name="com.tencent.smtt.tbs.video.PLAY" />
 <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
</activity>

第二步,调用播放视频的调用接口,通过TbsVideo的静态方法,如下:

//判断当前Tbs播放器是否已经可以使用。
public static boolean canUseTbsPlayer(Context context)
//直接调用播放接口,传入视频流的url
public static void openVideo(Context context, String videoUrl)
//extraData对象是根据定制需要传入约定的信息,没有需要可以传如null
public static void openVideo(Context context, String videoUrl, Bundle extraData)

5. 文件选择器

官方demo中有。简单说一下流程

WebChromeClient里面有回调openFileChooser、onShowFileChooser方法。

点击了网页的控件就可以回调上面的方法

在回调方法里面我们利用Intent打开文件选择器

然后选择完文件后在onActivityResult回调里面进行获取,然后利用ValueCallback<Uri>或者ValueCallback<Uri[]>的onReceiveValue进行返回路径给网页。

注意的地方

1. cookie的调整

com.tencent.smtt.sdk.CookieManagercom.tencent.smtt.sdk.CookieSyncManager的相关接口的调用,在接入SDK后,需要放到创建X5的WebView之后(也就是X5内核加载完成)进行;否则,cookie的相关操作只能影响系统内核。

2. WebView宽高的获取

由于SDK WebView所提供的WebView类,是对系统WebView的聚合包装,所以:获取系统内核的WebView或者 x5内核的WebView的宽高需要这样:

webView.getView().getWidth();

3. X5内核

开始说了,这个腾讯的WebView使用的是自己的X5内核。

如果你的手机有安装QQ、微信、QQ浏览器等等QQ的产品, 这个内核就已经是已经安装到手机上了。

如果都没有,在Application初始化调用initX5Environment方法的时候,会进行离线安装,失败就会自动切换自用自带内核。

如果都都没有,而且手机没有链接网络,需要离线,这时候需要打包内核进app,app包增大20M左右.

那怎么判断他是使用X5内核还是自带内核呢?
显示网页文字时,可通过长按选择文字的标识判断,如下水滴状选择效果是x5webview的标志:

4. 64位手机的兼容

x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行。具体操作如下:

如果使用是Eclipse

需要将所有的.so文件都放置在so加载目录:lib/armeabi文件夹下(没有该目录则新建一个,AP中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,如果没有合适的so可以到官网http://x5.tencent.com/tbs/sdk.html下载官网“SDK接入示例“,拷贝对应目录下的liblbs.so文件),lib文件夹下不要有其他以”armeabi“开头的文件夹。

如果使用的是Android Studio:

1、打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果没有defaultConfig{}则手动添加),添加如下配置:

ndk{
 abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}

如果配置后编译报错,那么需要在gradle.properties文件中加上Android.useDeprecatedNdk=true;

2、打开http://x5.tencent.com/tbs/sdk.html,下载SDK接入示例,拷贝对应目录下的liblbs.so文件,到你的armeabi目录下

5. 混淆

jar包本来就已经是混淆好的了,如果你打包时候没有添加规则再混淆一遍的话,就会无法使用x5内核了。所以需要添加混淆规则:

下载混淆文件:http://res.imtt.qq.com/TES/proguard.zip

解压后用文本编辑器打开,复制里面的内容到你项目的proguard-rules.pro混淆文件即可。

简单包装

如果在项目中使用,一般来说最好是封装多一层。

  • 防止和原生的WebView搞混
  • 有什么问题,一改全改。
  • 可以添加一些功能,例如进度条等。

这里给一个简单加进度条的封装,在项目中使用的话,你在布局文件里面使用路径+ProgressWebview即可

public class ProgressWebview extends WebView {
 private ProgressBar progressbar; //进度条
 private int progressHeight = 10; //进度条的高度,默认10px
 public ProgressWebview(Context context) {
 super(context);
 initView(context);
 }
 public ProgressWebview(Context context, AttributeSet attributeSet) {
 super(context, attributeSet);
 initView(context);
 }
 private void initView(Context context) {
 //开启js脚本支持
 getSettings().setJavaScriptEnabled(true);
 //创建进度条
 progressbar = new ProgressBar(context, null,
 android.R.attr.progressBarStyleHorizontal);
 //设置加载进度条的高度
 progressbar.setLayoutParams(new AbsoluteLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, progressHeight, 0, 0));
 Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states);
 progressbar.setProgressDrawable(drawable);
 //添加进度到WebView
 addView(progressbar);
 //适配手机大小
 getSettings().setUseWideViewPort(true);
 getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
 getSettings().setLoadWithOverviewMode(true);
 getSettings().setSupportZoom(true);
 getSettings().setBuiltInZoomControls(true);
 getSettings().setDisplayZoomControls(false);
 setWebChromeClient(new WVChromeClient());
 setWebViewClient(new WVClient());
 }
 //进度显示
 private class WVChromeClient extends WebChromeClient {
 @Override
 public void onProgressChanged(WebView view, int newProgress) {
 if (newProgress == 100) {
 progressbar.setVisibility(GONE);
 } else {
 if (progressbar.getVisibility() == GONE)
  progressbar.setVisibility(VISIBLE);
 progressbar.setProgress(newProgress);
 }
 if (mListener != null) {
 mListener.onProgressChange(view, newProgress);
 }
 super.onProgressChanged(view, newProgress);
 }
 }
 private class WVClient extends WebViewClient {
 @Override
 public boolean shouldOverrideUrlLoading(WebView view, String url) {
 //在当前Activity打开
 view.loadUrl(url);
 return true;
 }
 @Override
 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
 //https忽略证书问题
 handler.proceed();
 }
 @Override
 public void onPageFinished(WebView view, String url) {
 progressbar.setVisibility(GONE);
 if (mListener != null) {
 mListener.onPageFinish(view);
 }
 super.onPageFinished(view, url);
 }
 }
 private onWebViewListener mListener;
 public void setOnWebViewListener(onWebViewListener listener) {
 this.mListener = listener;
 }
 //进度回调接口
 public interface onWebViewListener {
 void onProgressChange(WebView view, int newProgress);
 void onPageFinish(WebView view);
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • WebView的介绍与简单实现Android和H5互调的方法

    为什么要学习Android与H5互调? 微信,QQ空间等大量软件都内嵌了H5,不得不说是一种趋势.Android与H5互调可以让我们的实现混合开发,至于混合开发就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html 5来开发. 优势:使用H5实现的功能能够在不升级App的情况下动态更新,而且可以在Android或iOS的App上同时运行,节约了成本,提高了开发效率. 原理:其实就是Java代码和JavaScript之间的调用. 开局插入一张文章的目录结构: WebView简介 要

  • Android开发笔记之如何正确获取WebView的网页Title

    前言 现在APP中用到H5页面的越来越多,而如何正确获取WebView的网页title是必须要考虑的. 最近做项目的时候,老大让我把之前做的webview打开网页的功能修改一下,说是要动态的获取网页的标题,然后显示在我们自己app的标题栏上,然后我就屁颠屁颠的跑去看webview的源码,看看有没有获取标题这个方法. 网上能查的大部分方法都是在WebChromeClient的onReceivedTitle(WebView view, String title)中拿到title.但是这个方法在网页回

  • Android实现视频播放--腾讯浏览服务(TBS)功能

    TBS视频播放 TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18种视频格式.同时支持硬件解码,使得内存占用,稳定性相较于系统播放器都更优. 接入TBS 1.导入jar文件和so文件 官网SDK下载地址:https://x5.tencent.com/tbs/sdk.html,示例中有jar文件和so文件,具体导入方式我上一篇文章有详细介绍(Andro

  • Android使用WebView实现文件下载功能

    本文实例为大家分享了WebView实现文件下载功能的具体代码,供大家参考,具体内容如下 本节引言 本节给大家介绍的是WebView下载文件的知识点,当我们在使用普通浏览器的时候,比如UC, 当我们点击到一个可供下载链接的时候,就会进行下载,WebView作为一个浏览器般的组件, 当然也是支持下载,我们可以自己来写下载的流程,设置下载后的文件放哪,以什么文件名 保存,当然也可以调用其它内置的浏览器来进行下载,比如Chrome,UC等等! 下面给大家演示下用法! 1.调用其它浏览器下载文件: 这个很

  • Android使用WebView实现截图分享功能

    在APP项目的开发过程中,经常会用到分享图片的功能,有时候还需要根据当前用户信息获取指定的分享图片,比如要求在用户分享图中显示用户名.Uid.用户头像等信息.想到的实现方法主要有两点: 1.通过android SDK自带的Canvas方法进行绘制. 2.通过webView实现客户端与H5交互,然后将H5界面做截图处理. 本文主要介绍第二种方式的实现过程,第一种方式的实现方法,后续有时间会在博客中做说明,下面开始本文内容. 首先确定我们要实现的逻辑: 1.客户端与H5的交互,客户端将用户信息(用户

  • 快速解决android webview https图片不显示的问题

    Android webview 从Lollipop(5.0)开始webview默认不允许混合模式,https当中不能加载http资源,需要设置开启. 解决方法: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } 以上这篇快速解决android webview

  • 关于Android中WebView远程代码执行漏洞浅析

    1. WebView 远程代码执行漏洞描述 Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口.该

  • Android混合开发教程之WebView的使用方法总结

    前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 简介 WebView是一个基于webkit引擎.展现web页面的控件. Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome. 作用 显示和渲染Web页面 直接使用html文件(网络上或本地assets中)作布局 可和JavaScript交互调用 WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求

  • Android WebView实现截长图功能

    本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能:  机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的View 2:截取View在屏幕渲染的内容 3:不断滚动View,截取View渲染的内容,存储到容器中 4:将容器中图片,按顺序拼接组装起来. 5.保存 根据我们推测的逻辑,一步步实现: 1.我们这里以WebView控件为介绍对象 <WebView android:id="@+id/web_view

  • Android在项目中接入腾讯TBS浏览器WebView的教程与注意的地方

    腾讯TBS浏览器服务 我们都知道,在Android开发中,经常会用到Webview,而且WebView是出了名的坑的,各种bug.这时候腾讯老哥站出来了,搞了一个TBS浏览器服务这个东西. 说得这么屌,其实就是一个webView控件,然后解析解析网页的内核是他自己做的,叫X5内核(系统原生的WebView用的是WebKit内核),所以我们开发者用的时候,主要就是用这个com.tencent.smtt.sdk.WebView控件 当然这个控件有很多功能,当然也有些要注意的地方. 官网地址:http

  • vue如何在项目中调用腾讯云的滑动验证码

    在项目中使用滑动验证,可以调用腾讯云的组件和接口(付费项目) 导言 首先看看官方的步骤教学: https://cloud.tencent.com/document/product/1110/36839 其中,前端涉及到的是"步骤3:客户端接入",里面介绍了两种接入方法:"快速接入"和"定制接入". 项目是原生HTML 或者 jQuery 开发,那么可以使用"快速接入". 项目使用 vue.react 等框架开发,则需要使用&q

  • Android Studio项目中导入开源库的方法

    前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发.然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不知道怎么导入到自己的基于Android Studio项目中来,微博上也有人私信我,让我来写写,正好今天回来的比较早,就写写吧.主要介绍一下常见的一些导包的场景. 前言 复制代码 代码如下: --project   //项目目录   |   build.gradle  //项目的gradle配置文件

  • 在Vue项目中引入腾讯验证码服务的教程

    什么是腾讯验证码?它长这个样子--:point_down: 最近公司项目要求引入腾讯云验证,要求是这样的: 为了防止别人恶意刷短信验证码,当用户短时间内多次获取验证码的时候,需要调用腾讯验证码,验证成功后会继续自动发送验证码 ,刚开始的我听的一脸蒙蔽,网上搜索也没有多少相关的文章,然而现在我接通啦,发现是很简单点事(或许就是因为太简单了所以没有人写2333-) 不多BB,开始吧! 先看文档的接口调用流程: (文档地址: cloud.tencent.com/document/pr- ) 总共分成几

  • Vue3+Vue-cli4项目中使用腾讯滑块验证码的方法

    简介: 滑块验证码相比于传统的图片验证码具有以下优点: 验证码的具体验证不需要服务端去验证,服务端只需要核验验证结果即可. 验证码的实现不需要我们去了解,也不需要我们去具体实现. 滑块验证码的安全程度相比于传统验证码高不少. ... 由于网络上和腾讯api文档中缺少关于vue3中组合式api怎么应用腾讯的滑块验证码,所以出此教程.本人也非vue大佬,对vue的理解也不过停留在初级使用的程度上,有错误之处,敬请指出. 开始: 首先,我们需要去腾讯云申请一个图形验证的api,使用场景中选择自己的使用

  • JSP开发中在spring mvc项目中实现登录账号单浏览器登录

    JSP开发中在spring mvc项目中实现登录账号单浏览器登录 在很多web产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录.通俗点讲就是当A账号在 浏览器1当中登录了,此时在浏览器2中登录A账号.那么在浏览器1中的A账号将会被挤出去,当用户操作浏览器1的页面,页面会 跳到登录页面,需要重新登录.那么我们怎么实现这样的功能呢?下面将给大家进行详细的介绍: 原理 用户A使用账号a在浏览器当中登录,然后用户B在另外一台电脑上的浏览器登录账号a,当用户B登录验证成功时,将会触

  • 在IDEA的maven项目中连接并使用MySQL8.0的方法教程

    首先看一下我的基本的开发环境: 操作系统:MacOS 10.13.5编辑器:IDEA 2018.3其他:MySQL8.0.15.Maven 3.3.9.JDK 1.8 好,下面就正式开始: 第一步:在IDEA中新建一个maven项目 1.使用骨架创建maven项目,此处选择:maven-archetype-quickstart 2.填入GroupId和ArtifactId 3.第一个选中maven安装的文件夹,第二个选中maven安装文件夹中的conf/settings.xml,第三个如果set

  • Android库项目中的资源ID冲突的解决方法

    1.前言 Android Studio对模块化开发提供的一个很有用的功能就是可以在主项目下新建库项目(Module),但是在使用库项目时却有一个问题就是资源ID冲突,因为编译时SDK会自动帮我们处理这个问题,所以一般我们不会察觉到,但是在某些情况下,我们需要意识到这个问题的存在. 比如,在新建的库项目中使用如下代码: public void onButtonClick(View view) { switch (view.getId()) { case R.id.button_1: break;

  • Android Studio 在项目中引用第三方jar包的方法

    在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets { main { jniLibs.srcDirs = ['libs'] } } 点击[Sync Now],会生成jniLibs文件夹 找到jniLibs文件夹对应的实体目录,把需要用到的jar包放到该目录下 在build.gradle文件中,在dependencies模块,添加以下代码: compile files

  • Android原生项目集成Flutter解决方案

    了解一下如何在 Android 原生项目中集成 Flutter 生成配置 在原生项目根目录执行命令 flutter create -t module --org {package_name} {module_name} // 此处 module_name 的命令遵循 Android 子 module 的命名即可.不能有中划线. // 比如, flutter create -t module --org com.engineer.mini.flutter flutter_sub // 此处 mod

随机推荐