本篇分為三部分:
-
介紹Crosswalk背景
-
介紹Crosswalk集成步驟
-
為了減小體積,僅集成兼容ARM的Crosswalk(針對X86同理)
PART_A Crosswalk背景介紹
Web技術的優勢可想而知.
- 當下app開發模式偏向Android/IOS原生殼+Web. 瀏覽器內核性能至關重要
- 這樣開發的優勢很明顯,當出現bug或者app要升級時不需要用戶下載安裝包,而是在服務器后台維護即可,極大的增強了開發的靈活性和用戶粘性
-
Crosswalk的優勢
-
采用Chromium內核並持續更新維護,使基於Crosswalk的Web應用充分享有Chromium的功能與性能優勢,以及較好的平台一致性. 同時,支持最新的H5的API(WebGL,WebAudio,WebRTC,Gamepad,WebSocket,Presentation等)。並且在低端Android設備上也能流暢運行
-
支持通過編寫原生的Java代碼來創建新的Web API
-
支持與Cordova的整合(已有大量的成熟的API實現供開發者使用)
-
允許Web開發者將他們的應用打包成系統的應用安裝包,獲得與本地應用一致的體驗. 同時也支持多個應用同時使用一個Crosswalk庫的共享模式,僅當應用第一次啟動並且發現系統還沒有相應的Crosswalk庫時才提示用戶下載安裝. 目前是大多數情況下開發者將Crosswalk直接嵌入到應用本身。在這種嵌入模式下Web應用開發者可以完全控制Crosswalk的更新
-
-
與WebView的區別
- 系統自帶的WebView組件在H5的解析能力上相比Safari for iOS、Chrome for Android都要差很多. 另外在Android平台上,由於系統碎片化比較嚴重,不同Android版本的WebView的H5解析能力也有較大差異,導致相應的HTML5應用一致性難以保證. 作為第三方的獨立引擎Crosswalk有較好的H5性、功能支持,較好的平台一致性,以及近似原生應用的系統整合體驗. 另外Crosswalk提供了共享模式來減少應用的大小
-
補充
- WebView自Android 4.4起已經采用了Chromium內核,但這與Crosswalk比起來目前仍存在兩大缺陷:1.不被4.4之前的Android支持;2.性、功能(性能和功能)與Crosswalk有較大差別
-
Crosswalk與Cordova
- Cordova(PhoneGap)作為第三方的H5應用開發框架工具的代表,極大促進了H5應用的發展. 提供了方便的跨平台應用打包/發布服務、實用的API、靈活的擴展機制、以及積累下來的豐富的第三方API實現. 然而Cordova使用的web引擎是系統的WebView. 如果開發者正在使用Cordova並且渴望更好的性能和更新的功能,如WebGL,那么Crosswalk是一個很好的選擇! Crosswalk支持開發者在Cordova中用Crosswalk替換原生的WebView,並將兩者完美的融合. 當然,它也支持Crodova的擴展機制. 目前Crosswalk采用提供定制過的Cordova開發包來支持Cordova中Crosswalk引擎的使用
PART_B Crosswalk集成步驟
-
新建項目
Minimum SDK 選擇 "API 19"
-
配置gradle
repositories { maven { url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2' } }
-
compile 'org.xwalk:xwalk_core_library:10.39.235.15'
-
配置結果參考下圖
-
配置權限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
- 1
- 2
- 3
-
在application標簽中聲明開啟硬件加速
android:hardwareAccelerated="true"
-
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" android:orientation="vertical"> <org.xwalk.core.XWalkView android:id="@+id/xWalkWebView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" android:orientation="vertical" /> </LinearLayout>
-
Activity中
-
需要監聽系統事件(生命周期、Intent、ActivityResult)
-
必須顯示調用
onDestroy()
,防止瀏覽器引擎的內存泄漏public class MainActivity extends Activity { @Bind(R.id.xWalkWebView) XWalkView xWalkWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); xWalkWebView.load("http://sina.com.cn", null); // 開啟調試 XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true); } /**通過Activity管理XWalkWebView的聲明周期*/ @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(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (xwv != null) { xwv.onActivityResult(requestCode, resultCode, data); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (xwv != null) { xwv.onNewIntent(intent); } } }
-
PART_C 兼容ARM的Crosswalk集成簡要
-
-
點進當前最新版本
可以看到完整包39m,arm包20m. 我們在此選擇第一個arm包
-
將下載好的arm.aar包放入工程的libs目錄下
-
在builde.gradle中添加配置
flatDir { dirs 'libs' }
- 1
- 2
- 3
compile 'org.xwalk:xwalk_core_library:15.44.384.13-arm@aar'
- 1
配置結果參考下圖
-
重新編譯打包,可見結果如下(集成完整Crosswalk與僅集成ARM包)
第三部分小結
-
1.眾所周知,Crosswalk的體積是個惱人的問題. 可以針對針對ARM、X86分別引入對應的庫文件,減少不必要的空間浪費
-
2.可以使用動態庫加載
轉載http://blog.csdn.net/itcatface/article/details/49799337