android基礎--使用Sencha完成APK區域性更新
大體步驟如下:
一:新建自己的Android工程
二:熟悉並從官網http://www.sencha.com/products/sdk-tools/下載Sencha SDK 及基本使用的工具包
三:以經典Project 《HelloWorld 》開始Sencha之旅吧 http://www.sencha.com/learn/hello-world
四:整合Sencha與Android Project,完整最終版本的區域性模組更新
如上所述,配置及下載Sencha SDK及工具包的步驟大家可以直接在官網中獲取
詳細流程:
一:Android工程本來就是純原生的Android工程,目錄結構如下圖所示:
下載的Sencha SDK 及裡面的一些工具如下圖所示:
只是裡面加了一些基於HTML 、EXT、JS等完成的一些例項 DEMO,此外不多做解釋,大家可私下瞅瞅。
本文重心,用以上工具完整Android APK 區域性模組更新,此處講下實現原理,大家都知道,Android APK成功打包之後是不能再去動態的修改裡面的資料的,更談不上區域性模組更新了,這樣也就有了疑問,需求如果有APK區域性模組更新的話是不是就不能做了,答案是否!這個地方我們可以這樣,既然Sencha(使用Sencha的原因就是Sencha基本HTML5,而HTML5中又可以寫JS,包括現在主流框架JQuery等,可以在JS中呼叫非同步網路請求、呼叫JAVA程式碼,實現JQuery經典功能:動態非同步重新整理介面等)支援模組化更新的話,換個思路,可以把我們要更新的每個模組當成是一個基於Sencha 、HTML5、EXT的單獨的工程,Android APK不能動態 新增模組,但APK裡面的類,也就是我們的四大元件之一Activity中我們是可以通過網路訪問去伺服器下載我們所要使用的資料的,這樣就好辦了,繼續……..
舉個最簡單的例子:
如果我們打包成的APK(XiaoMaSencha.apk) 中包含五、六個的子模組(模組一、模組二、模組三、模組四、模組五)甚至更多的模組的話,就可以把各個子模組當成一個完整的Sehcna實現的Project,在需要模組時通過Android APK中Activity中的網路請求來下載儲存於伺服器上的各個Sencha子模組,最終下載到本地SD卡上,供我們APK使用, 這樣的話,就可以在即不違反Android APK 打包後不能動的前提下,又可以完成對其子模組的更新及操作,何樂不為?下面來看下具體的實現
第一:完成區域性模組更新的前提是在服務端先備好我們的子模組(子模組一、子模組二、子模組三……..)
第二:完成本地可打包APK的Android工程****.apk(包含從服務端下載資料包功能)
第三:在工程中嵌入PhoneGap來支援在安卓工程中
以:super.loadUrl(“file:///android_asset/sencha/init.html”);形式來載入基於HTML5、JS、JQuery等技術實現的子模組,此處嵌入PhoneGap的原因是PhoneGap支援以loadUrl來載入Sencha(HTML5、JQuery、EXT技術實現)儲存於本地SD卡上的工程,只要檔案完整並且路徑正確就可正常使用Sencha實現的子模組。
好了,原理就是這樣,更新子模組,簡單說白了就是:通過本地Android JAVA程式碼去下載儲存於服務端子模組資料,藉助PhoneGap等框架來實現APK區域性模組的更新,舉個例子:
以以上***.apk(此apk包為以純JAVA程式碼實現的Android工程,包含從伺服器下載工具類,為下載子模組使用)為例,下載好基本Sencha框架實現的子模組資料包後,可藉助PhoneGap優勢(以loadUrl形式載入HTML5、JQuery、EXT技術實現模組)來載入子模組,如從伺服器下載後的子模組包儲存於SD卡根目錄 下時,可使用PhoneGap以下形式來載入下載的資料包,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com.xiaoma.sencha;
import org.apache.cordova.DroidGap;
import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText;
import com.foreveross.cube.R;
public class MainActivity extends DroidGap {
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.login); super.loadUrl("sdcard/sencha/init.html"); // initView(); } |
載入的init.html的內容是基於HTML5、JS、JQuery、EXT等技術結合實現的一個網頁來充當手機中使用的子模組,具體內容如下:此處只隨便寫點東西進去,如果大家有自己需求的話,可以用HTML5等技術實現,複雜功能也可以用這個實現,然後儲存於伺服器供Android工程下載到本地,藉助PhoneGap來載入使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <script src="assets/js/jquery-1.8.2.min.js"></script> <title>應用初始化......</title> </head> <body> <div style="display: none;"> <h1>應用初始化</h1> <!-- 等待對話方塊 --> <div id="progressModal" class="modal hide"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h3>載入中......</h3> </div> </div>
<!-- 出錯對話方塊 --> <div id="errorModal" class="modal hide"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h3>出錯</h3> </div> <div class="modal-body"> <p></p> </div> </div> </div> </body> </html> |
上面的HTML只是簡單的舉個例子, 如果大家有更復雜的功能,那得先過HTML5這一關了,不然免談,呵呵,下面給大家貼幾個用Sencha實現的執行效果吧,可照著官網的DEMO或API一步步實現 ,如下: