1. 程式人生 > >Android混合開發,html5自動更新爬過的坑

Android混合開發,html5自動更新爬過的坑

現在使用混合開發的公司越來越多,雖然出現了一些新技術,比如Facebook的react native、阿里的weex,但依然阻擋不了一些公司採用h5的決心,當然,這也是從多方面考慮的選擇。

在三年前就使用過html5混合開發,當時做的是一款貴金屬軟體,漲跌五線譜、乾坤交易,還有各個股市的資訊,那時候還是上波牛市爆發的前夕,哎。。。

最近公司讓用h5混合開發,一些頁面和功能有h5分擔,最初時候放在本地assets資料夾下,後來由於前端同事頻繁修改和更新,再加上資料安全方面考慮,決定把包放在伺服器,採用介面返回欄位,判斷是否需要下載更新,接下來就談下開發中遇到的幾個坑,給自己做個筆記,也分享給需要的朋友。

首坑:Android系統

對於h5的混合開發,Android系統就是個大坑,三年前接入h5點時候,那時候好多手機卡的跟ppt似的,4.0後Google進行了一些優化,效率上確實好了很多,但後面又來了一系列巨坑,比如4.3之前一個核心,4.3一個單獨核心,4.3之後又是一個核心,原生的WebView沒法做到整體相容,最後採取了一個方案,使用大企鵝的x5核心,優點如下:

  1. 裡面類名和方法名,和原生的名稱幾乎是一樣的,使用更方便
  2. QQ和微信都是採用x5核心,核心共享,不需要單獨下載
  3. 相容性相對較好

二坑:DownloadManager。

最初的方案是採用系統下類DownloadManager,既然是系統提供的,很多碼友肯定覺得很OK的,但是爆破部隊瞎搞,三星的手機系統卻把DownloadManager的api刪了,這尼瑪就噁心了,你還是繼續玩爆炸吧。。。

三坑:webview載入不顯示

之前放在assets的時候,頁面顯示的很6,換成下載到本地讀取,居然不顯示了,列印下路徑,沒問題,那就可以確定問題出在了載入過程了,查了下資料發現,可以是用loadData,這種方法需要先將html檔案讀取出來,以字串傳入loadData,可以展示頁面,但是不會引用css、js等檔案。也可以使用loadUrl,不過需要注意,這裡因為是使用本地資料,所以傳入的url需要做些處理,例如:

  1. 如果html檔案存於assets:則加字首:file:///android_asset/
  2. 如果html檔案存於sdcard:則加字首:content://com.android.htmlfileprovider/sdcard/

PS:content字首可能導致異常,直接使用file:///sdcard/ 或者 file:/sdcard也可以

四坑:特殊字元的轉義

有一個頁面,iOS同事那邊一直顯示正常,Android這邊怎麼都出不來,同樣頁面不同資料的頁面就顯示頁面,當時就覺得很奇怪,不應該是h5點問題,要不iOS也不會顯示,列印了URL一看,擦,URL中有一個”%”,轉義後便OK了。當然,根據需要還有一些特殊字元也需要轉義,”%”只是一個個例。

五坑:部分手機報錯不顯示

A WebView method was called on thread ‘JavaBridge’. All WebView methods must be called on the same thread。

這是由於部分手機WebView中方法必須在同一個執行緒,通過列印Thread.currentThread()便知不屬於同一個執行緒,解決方案:

mWebView.post(new Runnable() {
                @Override
                public void run() {
                    mWebView.loadUrl("javascript:" + data);
                }
            });

程式碼還未從公司專案中剝離,目前不上傳了,如有錯誤或者補充,多多指教。

相關推薦

Android混合開發html5自動更新

現在使用混合開發的公司越來越多,雖然出現了一些新技術,比如Facebook的react native、阿里的weex,但依然阻擋不了一些公司採用h5的決心,當然,這也是從多方面考慮的選擇。 在三年前就使用過html5混合開發,當時做的是一款貴金屬軟體,漲跌五線

Android混合開發html5自己主動更新

script loadurl 處理 必須 ack 功能 是個 code ppt 如今使用混合開發的公司越來越多,盡管出現了一些新技術,比方Facebook的react native、阿裏的weex,但依舊阻擋不了一些公司採用h5的決心。當然,這也是從多方

React Native 之Android混合開發及遇到的各種

最近自己也是剛在學習React Native的知識,在學習到React Native 嵌入到原生應用的時候,感覺遇到了各種坑,這裡做一下記錄。若有說得不對的地方,謝謝大家糾正。 React Native嵌入到原生應用的教程在其官方指導文件裡也有,但是感覺很多注意點沒講到,現

Android WIFI開發包含開啟WIFI掃描列表。 自動連線指定WIFI等

本文章是在原文基礎上進行開發,,修改的 ,原文地址如下: https://www.cnblogs.com/pied/p/3767336.html 開發中專案如下: package stu.edu.cn.myapplication; import android.content.Conte

Cocos2d-x,Android,IOS,遊戲HTML5開發/交流/學習/資源 沈大海

上一節談到啟動了節點,通過cleos工具可以獲取區塊鏈狀態 以上命令返回了以下內容: server_version:版本 chain_id:網路編號,以上圖片的網路編號是主網,但在未連線主網之前一定不是acaxxxxx開頭的 head_block_num:頭區塊編

雜園日記-H5-IOS-Android混合開發

api div col 調用 strong java -i 日記 post 1.js 調用 原生API iOS: window.webkit.messageHandlers.yourFunName.postMessage({"1":"3"}); //調用的方法名稱為:yo

es6+require混合開發兼容es6 moduleimport,export之 加載css及公用date-main

plugins symbol 默認參數 安裝插件 alt 路徑 目的 編譯參數 row 大家好!上篇文章已經介紹了搭建文件夾,以及加載js文件。現在講一下加載css ,以及對baseUrl的理解 1.對項目結構的認知 一個項目的結構是根據項目的架構來決定的,當然也可以做到更

No repository found containingeclipse 自動更新erro 解決

.com new eclipse strong 百度搜索 x86_64 tor 圖片 war 自動更新eclipse 出現的如下錯誤: An error occurred while collecting items to be installedsession conte

Android混合開發-(Android與Web的互動)

在Android開發中,越來越多的商業專案使用了Android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那麼簡單,有時候還需要本地Java程式碼與HTML中的JavaScript進行互動,Android也對互動做了很好的封裝,所以很容易實現例如:點選網頁中的按鈕A

關於mui開發的APP自動更新的問題

關於APP自動更新的問題,可是有點坑啊,以下就是我遇到的問題 話不多說,直接上程式碼 1.先進行獲取手機APP當前的資訊 const wgtVer = null; //獲取當前版本號 plus.runtime.getProperty(pl

Android 混合開發以及注意事項以及h5上圖片在android機器上不顯示問題

因為這個app地嵌入h5做導航,所以需要呼叫android的互動進行獲取定位資訊和其他一些功能,做的效果是H5調Android打電話以及呼叫android手機相簿選擇圖片,現在總結下: 一.打電話以及定位: 1.定義h5呼叫的名稱: webView.addJavascriptInt

centos7下安裝git服務端自動更新到web目錄

1.伺服器安裝git ①yum安裝 [[email protected] home]#yum install -y git ②檢視版本 [[email protected] home]# git --version git version 1.7.1 2.建立git使用者

React Native Android混合開發實用教程

期待已久的新課上線啦!解鎖React Native開發新姿勢,一網打盡React Native最新與最熱技術,點我Get!!! 在React Native的應用場景中,有時候一個APP只有部分頁面是由React Native實現的,比如:我們常用的攜程App,它的首頁下

Android初級開發----用Handle機制更新UI介面

引入: 之前對Android講義的一個小專案——–隨指尖移動的小球進行修改,利用View中的invalidate()方法實現每次觸碰螢幕更新(UI執行緒)小球的位置並且附加判斷大小,實現觸碰更新小球大小隨之更改顏色. API引入: 每次執行inva

Android混合開發環境搭建(cordova)

開發軟體準備:Android Studio、Node.js、cordova(混合開發框架) 第一步,安裝Node.js,下載Node.js的安裝包,直接安裝即可。之前下載的6.10.3的版本,在dos命令下怎麼也安裝不成功cordova,後來改成6.10.2的版本,安裝正常

安卓混合開發看完就夠了

轉自作者:碼客_Yang 連結:http://www.jianshu.com/p/0b986d6e2e17在Android開發中,越來越多的商業專案使用了Android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那麼簡單,有時候還需要本地Java程式碼與HTML中的JavaS

Android Studio 開發環境搭建及更新SDK安裝下載問題

1。 下載Android Studio,可以是帶SDK 的,或不帶SDK的。 2.    安裝Android,帶SDK的會提示安裝位置。如何單獨安裝了SDK,Android Studio也安裝了SDK,可以通過設定SDK路徑解決。 附錄: 1. 無法連線到Andro

Android混合開發之Activity類與html頁面之間的相互跳轉(並解決黑屏問題)

在底部有本程式原始碼下載 本程式流程:程式啟動-->testActivity--->phonegap2框架類--->index.html--->testActivity,主要實現activity與html頁面的相互跳轉,並實現 傳遞引數的功能。 程式

Android 盒子開發TV開發經驗總結NO.1

Android  TV app開發與一般Android開發最大的區別在於焦點控制 , 使用者在使用Android TV裝置主要是通過遙控器操作app 機頂盒TV應用不同於手機應用,因為多數是沒有觸控式螢幕的,只能靠遙控器,所以要保持一個焦點的位置,讓使用者知道當

Android混合開發(一)——移動端與前端互動之JSBridge引入

一丶概述 最近轉前端,在做一個混合專案,Android + 前端Vue技術,Vue沒那麼快上手,先分享一下Android部分的經驗,後期會學習Flutter,和RN,邊學邊做邊分享 二丶效果演示 三丶JSBridge引入 1.什麼是JSBridge JSBrid