embed crosswalk in android studio
I'm new about android programming and android studio. I researched crosswalk embed API for my project and tried to embed it in android studio. But I couldn't be succesfull. Even I don't know exactly how can embed an API that has gradle file or not.
Maybe there is a problem with gradle system? In brief, how can I embed crosswalk-webview to my project with android studio step by step? Thanks a lot you.
Solution 1:
Following: https://diego.org/2015/01/07/embedding-crosswalk-in-android-studio/
-
Open AndroidStudio to project view in app folder edit build.gradle:
repositories { maven { url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'}} dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' compile 'org.xwalk:xwalk_core_library:10.39.235.15'}
sync project.
-
add this view in layout xml.
<org.xwalk.core.XWalkView android:id="@+id/xwalkWebView" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000" />
-
In activity or fragment:
import org.xwalk.core.XWalkPreferences; import org.xwalk.core.XWalkView;
-
in onCreate:
XWalkView xWalkWebView=(XWalkView)findViewById(R.id.xwalkWebView); xWalkWebView.clearCache(true); xWalkWebView.load("http://...", null); // turn on debugging XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
I've successfully used WebRTC in XWalkView on android 4.3 and 4.4 after failing with the out of the box WebView. I think the android 5 Lollipop is up to par with latest chromium.
Solution 2:
To embed into new projects or to build with Android Studio 3, you have to change the following four files
This is a sample app.gradle
file
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "online.saai.crosswalkandroid3"
minSdkVersion 17
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
maven {
url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2/'
}
}
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
dependencies {
compile 'org.xwalk:xwalk_core_library:23.53.589.4'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
Things to consider,
- To use the latest crosswalk
23.53.589.4
the min sdk version should be >= 16 here I used 17, ieminSdkVersion 17
- maven repository
repositories { ... }
and compile dependencycompile 'org.xwalk:xwalk_core_library:23.53.589.4'
should be given to download latest crosswalk -
Note You have to force gradle to use old android support library since there is a incompatibility in version 28
configurations.all { ... }
Once this is done replace your .xml
file (activity_main.xml
) with the following content, so that it can use crosswalk view
<?xml version="1.0" encoding="utf-8"?>
<org.xwalk.core.XWalkView android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</org.xwalk.core.XWalkView>
Now MainActivity.java
public class MainActivity extends Activity {
private XWalkView mXWalkView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mXWalkView = (XWalkView) findViewById(R.id.activity_main);
mXWalkView.load("http://crosswalk-project.org/", null);
}
}
Finally allow your application to use internet and other permissions that you need in your application, got to `AndroidManifest.xml' and add this permissions. Here is a sample
<manifest ... />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
...
<application ... />