h5加android原生开发越来越普及了,可是android的webview一直都是问题多多,可以考虑用第三方,在网上找了一下发现两个
腾讯的TBS
Crosswalk
TBS官网有教程,也没有研究,就研究了Crosswalk
我用的android studio版本是3.0.1,其它版本导入应该方法大同小异
先在两个build.gradle内分别添加
buildscript {
repositories {
maven {
url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
}
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven {
url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
}
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.0.2'
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'
implementation 'org.xwalk:xwalk_core_library:23.53.589.4'
}
activity_main.xml
<org.xwalk.core.XWalkView
android:id="@+id/walk_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private XWalkView walkView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
walkView = findViewById(R.id.walk_view);
walkView.loadUrl("http://www.baidu.com");
}
@Override
protected void onPause() {
super.onPause();
if (walkView != null) {
walkView.pauseTimers();
walkView.onHide();
}
}
@Override
protected void onResume() {
super.onResume();
if (walkView != null) {
walkView.resumeTimers();
walkView.onShow();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (walkView != null) {
walkView.onDestroy();
}
}
@Override
protected void onNewIntent(Intent intent) {
if (walkView != null) {
walkView.onNewIntent(intent);
}
}
}
效果就不看了,就是浏览器的样子
试试js和java交互
新建一个html文件
<!DOCTYPE html>
<html>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<a href="#" onclick="clicked()">java代码</a>
<script>
function clicked() {
alert(WebToJava.helloJava());
}
</script>
</body>
</html>
放入assets文件夹
MainActivity.java内修改代码
walkView = findViewById(R.id.walk_view);
walkView.addJavascriptInterface(new JsInterface(), "WebToJava");
walkView.loadUrl("file:///android_asset/index.html");
新建个类
public class JsInterface {
public JsInterface() {
}
@JavascriptInterface
public String helloJava() {
return "这是一段java代码";
}
}
@JavascriptInterface是org.xwalk.core.JavascriptInterface别搞错成webview的
好了,看效果
最后还要说一句,用Crosswalk体积会爆增,如果大量用到h5的话可以考虑使用,听说使用分开打包的方式能减少体积