GeckoView是由Mozilla推出的一个基于Gecko浏览器引擎可重用的Android库。
在了解GeckoView之前我也用过其他的webview,比如原生的webView内核,腾讯X5内核的以及crosswalk内核。那么在使用过程中,如果我们只是加载一些简单的网网页的话,原生的webview已经足够我们使用了,但是在遇到一些复杂的页面,和那些对渲染要求比较的高的时候,我们的原生webview就显得很没有优势了,且不同设备可能拥有这不同版本的webview,加上原生webview禁用了很多高级webApi,所以很多时候我们不得不选其他内核的webview进行加载网等操作,这样子我们也不用过多的去考虑目标平台的差异带来的问题。
即便是Google推出了基于 Chromium blink 内核实现的 WebView,但是很多国内厂商对其进行了精简或替代,导致 WebView 内核也是碎片化问题严重,这让开发者直接使用系统浏览器内核进行开发产生了众多顾虑,不同机型适配难度也大大增加
关于X5和CrossWalk对比原生webview 的优缺点我们后面再说,今天我们只聊聊GeckoView。
为什么选择GeckoView?
Android提供了内置的WebView,但它并非旨在构建浏览器,并且许多高级Web API被禁用。Android的WebView也是一个移动的目标:不可能确切知道哪个引擎(以及该引擎的哪个版本)将在客户端设备上为WebView提供动力。
相比之下,GeckoView是:
- 功能齐全:GeckoView旨在将Web的全部功能展示给应用程序,包括适合构建Web浏览器。
- 自包含的:因为GeckoView是与应用程序捆绑在一起的独立库,所以您可以确信所测试的代码是将实际运行的代码。
- 符合标准:与Firefox一样,GeckoView为现代Web标准提供了出色的支持。
我们先来看看怎么使用的吧
配置Gradle
1、设置GeckoView版本
GeckoView具有三个发布渠道:Stable(稳定版),Bate(测试版)和Nightly(通常是开发者自己维护的一个版本。白天的时候开发者们将各自的修改提交到一个中心代码库,然后在晚上做一次编译得到的版本)。浏览Maven存储库(https://maven.mozilla.org/?prefix=maven2/org/mozilla/geckoview/)以查看当前可用的内部版本。我目前使用的官网上介绍的版本,大家可以自行选用自己想要的版本。
ext {
geckoviewChannel = "nightly"
geckoviewVersion = "70.0.20190712095934"
}
2、田间Mozilla的Maven存储库
allprojects {
repositories {
google()
jcenter()
maven {
url "https://maven.mozilla.org/maven2/"
}
}
}
3、配置Java8支持
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.geckotest"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
4、添加GeckoView依赖实现
implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}:${geckoviewVersion}"
布局文件中使用GeckoView
<org.mozilla.geckoview.GeckoView
android:id="@+id/geckoview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
在java类中添加使用
package com.example.geckotest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隐藏标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
GeckoView view = findViewById(R.id.geckoview);
GeckoSession session = new GeckoSession();
GeckoRuntime runtime = GeckoRuntime.create(this);
session.open(runtime);
view.setSession(session);
session.loadUri("https://www.baidu.com");
}
}
简单的GeckoView使用到这里就算完成了,但是我们在实际使用中肯定没有这个简单,下一篇文章我们将继续深入了解一下GeckoView