No description
  • Java 45.3%
  • JavaScript 27.8%
  • HTML 16.6%
  • Python 9.8%
  • Shell 0.4%
  • Other 0.1%
Find a file
2026-03-13 23:58:10 +08:00
.sisyphus/plans 完成项目构建和修复 2026-03-03 08:52:21 +08:00
.trae feat: 优化字母键盘和搜索界面 - 修复焦点问题并添加返回按钮 2026-03-11 17:19:52 +08:00
.vscode 完成项目构建和修复 2026-03-03 08:52:21 +08:00
app feat: 更新视频播放器和资源选择功能 2026-03-13 23:58:10 +08:00
gradle/wrapper 完成项目构建和修复 2026-03-03 08:52:21 +08:00
player 完成项目构建和修复 2026-03-03 08:52:21 +08:00
temp 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
.env 完成项目构建和修复 2026-03-03 08:52:21 +08:00
.gitignore 修复DPlayer冲突问题,拦截页面dplayer.js加载 2026-03-06 18:08:01 +08:00
.penv 修复DPlayer冲突问题,拦截页面dplayer.js加载 2026-03-06 18:08:01 +08:00
AndroidManifest.xml 完成项目构建和修复 2026-03-03 08:52:21 +08:00
build.gradle 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
build_test.bat 完成项目构建和修复 2026-03-03 08:52:21 +08:00
build_with_java8.bat 完成项目构建和修复 2026-03-03 08:52:21 +08:00
complete_log.txt 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
gradle.properties 完成项目构建和修复 2026-03-03 08:52:21 +08:00
gradlew 完成项目构建和修复 2026-03-03 08:52:21 +08:00
gradlew.bat 完成项目构建和修复 2026-03-03 08:52:21 +08:00
JavaScript兼容性解决方案.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
local.properties 完成项目构建和修复 2026-03-03 08:52:21 +08:00
log.txt 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
logcat.txt 完成项目构建和修复 2026-03-03 08:52:21 +08:00
MACCMS视频播放优化说明.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
MacCMS解决方案总结.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
MainActivity copy.java 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
player_log.txt 完成项目构建和修复 2026-03-03 08:52:21 +08:00
player_sections.txt 完成项目构建和修复 2026-03-03 08:52:21 +08:00
README.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
settings.gradle 完成项目构建和修复 2026-03-03 08:52:21 +08:00
test_babel.html 完成项目构建和修复 2026-03-03 08:52:21 +08:00
test_cors_fix.html 修复搜索按钮和输入框焦点问题,修复VideoPlayerActivity.java语法错误 2026-03-11 14:07:15 +08:00
test_fix.html 修复搜索按钮和输入框焦点问题,修复VideoPlayerActivity.java语法错误 2026-03-11 14:07:15 +08:00
test_maccms_api.html 修复搜索按钮和输入框焦点问题,修复VideoPlayerActivity.java语法错误 2026-03-11 14:07:15 +08:00
test_video_detection.html 完成项目构建和修复 2026-03-03 08:52:21 +08:00
video_page.html 完成项目构建和修复 2026-03-03 08:52:21 +08:00
video_player_first_half.txt 完成项目构建和修复 2026-03-03 08:52:21 +08:00
video_player_middle_part.txt 完成项目构建和修复 2026-03-03 08:52:21 +08:00
video_player_section.txt 完成项目构建和修复 2026-03-03 08:52:21 +08:00
webview_log.txt 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
WebViewCompatibilityHelper copy.java 优化BabelWebViewActivity,修复ES5兼容性问题和视频播放问题 2026-03-05 19:36:03 +08:00
代理内容解码错误修复方案.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
快速开始.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
我已经成功完成了网络安全配置的创建和应用,解决了Android 4.3-4.4上的SSL握手问题.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00
部署检查清单.md 完成项目构建和修复 2026-03-03 08:52:21 +08:00

一份简单的CrossWalk使用指南

标签: android


1 什么是CrossWalk

Web技术的优势早已被广大应用开发者熟知比如可与云服务轻松集成基于响应式UI设计的精美布局高度的开放性跨平台能力, 高效的分发与部署等等。伴随着移动互联网的快速发展与HTML5技术的逐步成熟Web应用已经成为移动端跨平台应用开发的热门解决方案。然而要在移动端充分利用Web技术的优势仍然有许多障碍。

Crosswalk作为一款开源的web引擎正是为了跨越这些障碍而生。目前Crosswalk正式支持的移动操作系统包括Android和Tizen在Android 4.0及以上的系统中使用Crosswalk的Web应用程序在HTML5方面可以有一致的体验同时和系统的整合交互方面(比如启动画面、权限管理、应用切换、社交分享等等)可以做到类似原生应用。

Crosswalk的核心是将Chrome的内核引入到应用当中因此打包后的APK会增大完整版每个平台增加20MX86和arm两个平台就会增加40M。此外低配置的手机在使用的时候可能会出现卡顿的情况。

2 CrossWalk实战

首先用Android Studio新建一个android应用。

2.1 在项目build.gradle中声明maven仓库

repositories {
        google()
        maven {
            url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
        }
        jcenter()
    }

2.2 在build.gradle中添加依赖

dependencies {
    implementation 'org.xwalk:xwalk_core_library:23.53.589.4'
}

添加完后dependencies里应该类似这样

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    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'
}

2.3 在build.gradle中添加productFlavors

productFlavors是在gradle中配置多渠道的打包的工具。我们利用productFlavors区分不同的产品这里是arm和x86定义不同的逻辑使构建部分有差异的Android项目更加方便。

    productFlavors {
        armv7 {
            ndk {
                abiFilters "armeabi-v7a", ""
            }
            dimension "arm"
        }
        x86 {
            ndk {
                abiFilters "x86", ""
            }
            dimension "86"
        }
    }

2.4 在AndroidManifest.xml文件里添加应用权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

2.5 build一下发现报错

Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in library [org.xwalk:xwalk_core_library:23.53.589.4] /Users/sorahjy/.gradle/caches/transforms-1/files-1.1/xwalk_core_library-23.53.589.4.aar/4d63de3623aef3f8713541bd5435f90d/AndroidManifest.xml as the library might be using APIs not available in 15 Suggestion: use a compatible library with a minSdk of at most 15, or increase this project's minSdk version to at least 16, or use tools:overrideLibrary="org.xwalk.core" to force usage (may lead to runtime failures)

2.6 解决兼容性问题

打开AndroidMainfest.xml添加以下语句

xmlns:tools="http://schemas.android.com/tools"
<uses-sdk tools:overrideLibrary="org.xwalk.core" />

用来描述该应用程序可以运行的最小和最大API级别以及应用程序开发者设计期望运行的平台版本。通过在manifest清单文件中添加该属性我们可以更好的控制应用在不同android系统版本上的安装和兼容性体验问题 。 最终我们的androidMainfest.xml文件应该像这样

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.sorahjy.crosswalk">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-sdk tools:overrideLibrary="org.xwalk.core" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2.7 修改布局文件

加入一个XWalkView

<org.xwalk.core.XWalkView
        android:id="@+id/xwalkWebView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" />

2.8 最后敲一下MainActivity.java就可以啦

package com.sorahjy.crosswalk;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import org.xwalk.core.XWalkPreferences;
import org.xwalk.core.XWalkView;

public class MainActivity extends AppCompatActivity {
    private XWalkView xWalkWebView;
    //这个url就是你想要打开的页面。
    private String url="https://www.sorahjy.com";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        xWalkWebView = findViewById(R.id.xwalkWebView);
        // turn on debugging
        XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
        xWalkWebView.load(url, null);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (xWalkWebView != null) {
            xWalkWebView.pauseTimers();
            xWalkWebView.onHide();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (xWalkWebView != null) {
            xWalkWebView.resumeTimers();
            xWalkWebView.onShow();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (xWalkWebView != null) {
            xWalkWebView.onDestroy();
        }
    }
}

3 本地代理服务器功能

3.1 什么是本地代理服务器?

本地代理服务器是一个运行在应用内部的HTTP代理用于解决低版本Android系统(特别是Android 4.x)中的网络兼容性问题,包括:

  • TLS版本太低导致无法访问现代HTTPS网站
  • 证书不兼容导致的连接失败
  • Cipher套件不支持导致的握手失败
  • 网站样式和功能不兼容问题

3.2 代理服务器功能特点

  • 纯Java实现零依赖不绑定Node.js
  • 支持HTTP和HTTPS通过HTTP CONNECT方法实现HTTPS隧道
  • 全局证书信任:解决证书过期和不兼容问题
  • 优化的线程池:根据设备性能动态调整线程数量
  • 自动兼容网站自动处理CSS降级和JavaScript兼容性问题
  • 支持任何域名和端口:不受限制

3.3 如何使用代理服务器

3.3.1 自动模式

应用会在Android 4.x版本上自动启用代理模式无需手动配置。

3.3.2 手动模式

在MainActivity中您可以通过以下代码手动启用代理

// 启用代理模式
useProxy = true;
localProxyServer = new LocalProxyServer();
localProxyServer.start();

3.3.3 代理开关

应用界面中添加了一个代理开关按钮,可以随时切换代理状态:

  • 绿色表示代理已开启
  • 红色表示代理已关闭

3.4 测试代理功能

3.4.1 自动测试

应用提供了自动测试功能,可以测试以下内容:

  • GET请求测试
  • POST请求测试
  • 资源请求测试
  • 路径处理测试

3.4.2 测试网站

推荐使用以下网站进行测试:

3.5 代理服务器配置

3.5.1 端口配置

代理服务器默认监听端口为8989可以在LocalProxyServer.java中修改

private static final int PORT = 8989;

3.5.2 线程池配置

线程池大小会根据设备性能自动调整默认最小值为10。

3.6 故障排查

3.6.1 查看日志

使用以下命令查看代理服务器日志:

adb logcat | findstr LocalProxyServer

3.6.2 常见问题

  • 代理服务器启动失败:检查端口是否被占用
  • 网站无法访问:检查网络连接和代理配置
  • 样式异常代理服务器会自动处理CSS降级无需手动干预
  • JavaScript错误应用会注入Polyfill以支持现代JavaScript语法

4 结尾

感谢您的观看。希望能帮到你~

作者 @sorahjy
我的github https://github.com/sorahjy
2018 年 04月 22日