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") } }
沒有留言:
張貼留言