Android 內建的 webview 元件在顯示的體驗上不是很好,某些網頁版面的顯示結果就是不像真正的瀏覽器,而 Mozilla 的 Gecko View 是真正的瀏覽器引擎。
開發工具:Android Studio Chipmunk 2021.2.1 Patch 2
Project 層級 build.gradle
buildscript {
ext.kotlin_version = "1.7.10"
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app 層級 build.gradle
plugins {
id 'com.android.application'
id 'kotlin-android'
}
ext {
geckoviewChannel="arm64-v8a"
geckoviewVersion="100.0.20220425210429"
}
...
...
android {
compileSdkVersion 33
...
...
// Note: compileOptions is only required for minSdkVersion < 24
compileOptions {
// sourceCompatibility JavaVersion.VERSION_1_8
// targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_11 // 若採用這個, 則 compileSdkVersion 要指定 33(含) 以上
targetCompatibility JavaVersion.VERSION_11
}
}
...
...
repositories {
maven {
url "https://maven.mozilla.org/maven2/"
}
}
...
...
dependencies {
...
...
// mozilla geckoview
implementation "org.mozilla.geckoview:geckoview-${geckoviewChannel}:${geckoviewVersion}"
}
Build was configured to prefer settings repositories over project repositories but repository '???' was added by build file 'build.gradle'
的錯誤訊息,可能是您的專案套用了 Gradle6.8 的新規定,那就修改 settings.gradle ,將 dependencyResolutionManagement 這個區塊 註解 或 刪除,我是去參照其他舊專案,只留下 2 列,如下:
settings.gradle
rootProject.name = "專案名" include ':app'
AndroidManifest.xml
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<org.mozilla.geckoview.GeckoView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/geckoview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity" />
</RelativeLayout>
MainActivity.kt
...
...
import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoView;
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var view:GeckoView = findViewById(R.id.geckoview)
val session = GeckoSession()
val runtime = GeckoRuntime.create(this)
session.contentDelegate = object : ContentDelegate {}
if(runtime==null) {
runtime = GeckoRuntime.create(this)
}
session.open(runtime)
view.setSession(session)
session.loadUri("https://tw.yahoo.com")
}
}
沒有留言:
張貼留言