Mobile/GeckoView: Difference between revisions
(→Using GeckoView: Add more explanation about GV release schedule) |
(Completely overhaul the page) |
||
Line 1: | Line 1: | ||
'''GeckoView is [https://www.mozilla.org/firefox/ Firefox Quantum's] engine, packaged as a reusable Android library.''' | |||
GeckoView | Mozilla uses GeckoView to power [https://blog.mozilla.org/blog/2018/09/18/firefox-reality-now-available/ Firefox Reality], [https://www.mozilla.org/firefox/mobile/#focus Firefox Focus], and more. | ||
GeckoView serves a similar purpose to Android's built-in WebView, but it has its own APIs and is ''not'' a drop in replacement. | |||
== Why GeckoView? == | |||
While Android offers a built-in WebView, it's not intended for building browsers, and many advanced Web APIs are disabled. Android's WebView is also a moving target: it's impossible know exactly which engine (and what version of that engine) will power a WebView on client devices. | |||
In contrast, GeckoView is: | |||
* | * '''Full-Featured''': GeckoView is designed to expose the entire power of the Web to applications, including being suitable for building web browsers. | ||
* | * '''Self-Contained''': Because GeckoView is a standalone library that you bundle with your application, you can be confident that the code you test is the code that will actually run. | ||
* | * '''Standards Compliant''': Like Firefox, GeckoView offers excellent support for modern Web standards. WebAssembly, CSS Grid, or Variable Fonts? No problem! | ||
== Get Started == | |||
''Building a browser? Check out [https://mozilla-mobile.github.io/android-components/ Android Components], our collection of ready-to-use support libraries!'' | |||
== | === Configure Gradle === | ||
You need to add or edit four stanzas inside your module's <code>build.gradle</code> file. | |||
'''1. Set the GeckoView version''' | |||
''Like Firefox, GeckoView has three release channels: Stable, Beta, and Nightly. Browse the [https://maven.mozilla.org/?prefix=maven2/org/mozilla/geckoview/ Maven Repository] to see currently available builds. | |||
<syntaxhighlight lang="Groovy"> | |||
ext { | |||
geckoviewChannel = "nightly" | |||
geckoviewVersion = "64.0.20180927100037" | |||
} | |||
</syntaxhighlight> | |||
'''2. Add Mozilla's Maven repository''' | |||
<syntaxhighlight lang="Groovy"> | |||
repositories { | |||
maven { | |||
url "https://maven.mozilla.org/maven2/" | |||
} | |||
} | |||
</syntaxhighlight> | |||
'''3. Configure build flavors''' | |||
''Note: Until we resolve [https://bugzilla.mozilla.org/show_bug.cgi?id=1485045 Bug 1485045], you must configure a separate build variant for each CPU architecture.'' | |||
<syntaxhighlight lang="Groovy"> | |||
android { | |||
// ... | |||
// Note: compileOptions is only required for minSdkVersion < 24 | |||
compileOptions { | |||
sourceCompatibility JavaVersion.VERSION_1_8 | |||
targetCompatibility JavaVersion.VERSION_1_8 | |||
} | |||
flavorDimensions "abi" | |||
productFlavors { | |||
x86 { dimension "abi" } | |||
x86_64 { dimension "abi" } | |||
arm { dimension "abi" } | |||
aarch64 { dimension "abi" } | |||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
'''4. Add GeckoView Implementations''' | |||
<syntaxhighlight lang="Groovy"> | |||
dependencies { | |||
// ... | |||
x86Implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-x86:${geckoviewVersion}" | |||
x86_64Implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-x86_64:${geckoviewVersion}" | |||
armImplementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-armeabi-v7a:${geckoviewVersion}" | |||
aarch64Implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-arm64-v8a:${geckoviewVersion}" | |||
} | |||
</syntaxhighlight> | |||
=== Add GeckoView to a Layout === | |||
== | Inside a layout <code>.xml</code> file, add the following: | ||
<syntaxhighlight lang="XML"> | |||
<org.mozilla.geckoview.GeckoView | |||
android:id="@+id/geckoview" | |||
android:layout_width="fill_parent" | |||
android:layout_height="fill_parent" /> | |||
</syntaxhighlight> | |||
=== Initialize GeckoView in an Activity === | |||
< | '''1. Import the GeckoView classes inside an Activity:''' | ||
<syntaxhighlight lang="Java"> | |||
import org.mozilla.geckoview.GeckoRuntime; | |||
import org.mozilla.geckoview.GeckoSession; | |||
</ | import org.mozilla.geckoview.GeckoView; | ||
</syntaxhighlight> | |||
'''2. In that activity's <code>onCreate</code> function, add the following:''' | |||
<syntaxhighlight lang="Java"> | |||
GeckoView view = findViewById(R.id.geckoview); | |||
GeckoSession session = new GeckoSession(); | |||
GeckoRuntime runtime = GeckoRuntime.create(this); | |||
session.open(runtime); | |||
view.setSession(session); | |||
session.loadUri("about:buildconfig"); // Or any other URL... | |||
</syntaxhighlight> | |||
You | === You're done! === | ||
Your application should now load and display a webpage inside of GeckoView. | |||
To learn more about GeckoView's capabilities, review GeckoView's [https://mozilla.github.io/geckoview/javadoc/mozilla-central/ JavaDoc] or the [https://searchfox.org/mozilla-central/source/mobile/android/geckoview_example reference application]. | |||
== Getting Help == | |||
Interested in GeckoView? We're here to help. | |||
If you find a bug or need assistance, please reach out by either: | |||
== | * [https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox%20for%20Android&component=GeckoView Filing a bug] | ||
* Talking to us in [ircs://irc.mozilla.org:6697/#mobile #mobile] on [[Irc|irc.mozilla.org]]. | |||
== Documentation and Examples == | |||
'''APIs''' | |||
* [https://mozilla.github.io/geckoview/javadoc/mozilla-central/ JavaDoc API Documentation] | |||
* [https://mozilla-mobile.github.io/android-components/reference/ Android Components APIs] | |||
'''Building / Contributing''' | |||
* [[Mobile/Get_Involved]] | |||
* [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Introduction Mozilla Developer Guide] | |||
'''Bugs''' | |||
== | * [https://bugzilla.mozilla.org/buglist.cgi?product=Firefox%20for%20Android&component=GeckoView&resolution=---&list_id=14376671 All GeckoView Bugs] | ||
* [[Mobile/GeckoView/Bugs|GeckoView Bug Dashboard]] 🐛 | |||
[[ | '''Products / Examples''' | ||
* [https://blog.mozilla.org/blog/2018/09/18/firefox-reality-now-available/ Firefox Reality] ([https://github.com/mozillareality/firefoxreality GitHub]) | |||
* [https://www.mozilla.org/firefox/mobile/#focus Firefox Focus] ([https://github.com/mozilla-mobile/focus-android/ GitHub]) | |||
* [https://searchfox.org/mozilla-central/source/mobile/android/geckoview_example GeckoView Reference Application] |
Revision as of 16:07, 10 October 2018
GeckoView is Firefox Quantum's engine, packaged as a reusable Android library.
Mozilla uses GeckoView to power Firefox Reality, Firefox Focus, and more.
GeckoView serves a similar purpose to Android's built-in WebView, but it has its own APIs and is not a drop in replacement.
Why GeckoView?
While Android offers a built-in WebView, it's not intended for building browsers, and many advanced Web APIs are disabled. Android's WebView is also a moving target: it's impossible know exactly which engine (and what version of that engine) will power a WebView on client devices.
In contrast, GeckoView is:
- Full-Featured: GeckoView is designed to expose the entire power of the Web to applications, including being suitable for building web browsers.
- Self-Contained: Because GeckoView is a standalone library that you bundle with your application, you can be confident that the code you test is the code that will actually run.
- Standards Compliant: Like Firefox, GeckoView offers excellent support for modern Web standards. WebAssembly, CSS Grid, or Variable Fonts? No problem!
Get Started
Building a browser? Check out Android Components, our collection of ready-to-use support libraries!
Configure Gradle
You need to add or edit four stanzas inside your module's build.gradle
file.
1. Set the GeckoView version
Like Firefox, GeckoView has three release channels: Stable, Beta, and Nightly. Browse the Maven Repository to see currently available builds.
ext {
geckoviewChannel = "nightly"
geckoviewVersion = "64.0.20180927100037"
}
2. Add Mozilla's Maven repository
repositories {
maven {
url "https://maven.mozilla.org/maven2/"
}
}
3. Configure build flavors
Note: Until we resolve Bug 1485045, you must configure a separate build variant for each CPU architecture.
android {
// ...
// Note: compileOptions is only required for minSdkVersion < 24
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
flavorDimensions "abi"
productFlavors {
x86 { dimension "abi" }
x86_64 { dimension "abi" }
arm { dimension "abi" }
aarch64 { dimension "abi" }
}
}
4. Add GeckoView Implementations
dependencies {
// ...
x86Implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-x86:${geckoviewVersion}"
x86_64Implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-x86_64:${geckoviewVersion}"
armImplementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-armeabi-v7a:${geckoviewVersion}"
aarch64Implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}-arm64-v8a:${geckoviewVersion}"
}
Add GeckoView to a Layout
Inside a layout .xml
file, add the following:
<org.mozilla.geckoview.GeckoView
android:id="@+id/geckoview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Initialize GeckoView in an Activity
1. Import the GeckoView classes inside an Activity:
import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoView;
2. In that activity's onCreate
function, add the following:
GeckoView view = findViewById(R.id.geckoview);
GeckoSession session = new GeckoSession();
GeckoRuntime runtime = GeckoRuntime.create(this);
session.open(runtime);
view.setSession(session);
session.loadUri("about:buildconfig"); // Or any other URL...
You're done!
Your application should now load and display a webpage inside of GeckoView.
To learn more about GeckoView's capabilities, review GeckoView's JavaDoc or the reference application.
Getting Help
Interested in GeckoView? We're here to help.
If you find a bug or need assistance, please reach out by either:
- Filing a bug
- Talking to us in #mobile on irc.mozilla.org.
Documentation and Examples
APIs
Building / Contributing
Bugs
Products / Examples