當前位置:首頁 » 安卓系統 » osgiandroid

osgiandroid

發布時間: 2023-03-11 11:57:06

❶ 如何使用ApkPlug進行Android平台下模塊化開發

步驟1:注冊ApkPlug官網賬號:

打開Apkplug官網後,點擊右上角的「注冊」,在跳轉頁面填入相關信息,注冊界面如下:

確認後注冊成功,使用你的賬號登錄網站。你就可以用Apkplug開發應用了

END

步驟2:開發插件

Apkplug中的插件也是一個完整的apk,它與普通應用的區別有以下3點:

1, 插件assets目錄下有一個plugin.xml文檔,通過它可判斷一個工程是主應用還是插件。

2, 插件有一個入口類BundleActivator

3, 插件會外部引用一個osgi.jar文件

開發插件的步驟有如下4步:

1,引入osgi.jar庫文件

Apkplug中插件需要導入的庫文件只有一個osgi.jar。

導入osgi.jar庫文件需要注意一下

osgi.jar文件只能引用不能編譯到apk文件中,否則會出現類沖突的情況

異常代碼:had used a different Lorg/osgi/framework/BundleActivator; ring pre-verification。

osgi.jar包導入方法:

這文件在Apkplug SDK中可以找到。

❷ 怎樣在eclipse 工具中安裝android開發工具包插件

二 軟體安裝

(1)安裝jdk 6u19 安裝完成即可,無需配置環境變數

(2)解壓eclipse eclipse無需安裝,解壓後,直接打開就行

(3)解壓android sdk 這個也無需安裝,解壓後供後面使用

(4)最終有三個文件夾,如下圖:

三 Eclipse配置

1 安裝android 開發插件

(1)打開Eclipse, 在菜單欄上選擇 help->Install New SoftWare 出現如下界面:

點擊 Add按鈕,出現如下界面

輸入網址: https://dl-ssl.google.com/android/eclipse/ (如果出錯,請將https改成http)

名稱: Android (這里可以自定義)

點擊OK,將出現如下界面

點擊 Next按鈕 ,出現如下界面:

點擊Next按鈕,出現如下界面:

選擇 I accept the terms of the license agreements 點擊Next,進入安裝插件界面

安裝完成後,出現如下界面

點擊Yes按鈕,重啟Eclipse

2 配置android sdk

(1)點擊菜單window->preferences,進入如下界面

選擇你的android SDK解壓後的目錄,選錯了就會報錯,這個是升級工具,目前還沒有一個版本的SDK

(2)升級SDK版本,選擇菜單 window->Android sdk and avd manager 出現如下界面

選擇update all按鈕,出現如下界面

選擇左邊的某一項,點擊accept表示安裝,點擊reject表示不安裝,我這里只選了SDK 2.1 和samples for api 7 , 自己可以任意自定義,確定後,選擇install按鈕,進入安裝界面如下:

安裝完成如下:

(3)新建AVD(android vitural device) 和上面一樣,進入android sdk and avd manager,選中Vitural Devices 在點擊New按鈕

點擊New按鈕後,進入如下界面:

名稱可以隨便取,target選擇你需要的SDK版本,SD卡大小自定義,點擊 Create AVD,得到如下結果

如上顯示創建AVD完畢

3 新建Android項目

(1)選擇菜單file->new->other 進入如下界面:

選擇新建Android Project項目,點擊Next按鈕,進入如下界面

名稱自定義,應用程序名自定義,報名必須包含一個點以上,min SDK version裡面必須輸入整數

點擊Next出現如下界面:

注: 若有錯誤如: Project ... is missing required source folder: 'gen' ,則將gen->Android.Test->R.java這個文件刪掉,Eclipse會為我們重新生成這個文件,並且不會報錯。

(3)配置運行

右鍵項目->Run as -> Run Configuration 進入如下界面:
該界面,點擊Browse 按鈕,選擇你要運行的項目

選擇Target切換到以下界面

該界面選擇運行的AVD,將AVD前面的方框設置為選擇狀態。

(4)測試項目運行

右鍵項目名稱->run as ->Android Application 即可啟動運行該Android程序,如下所示:

正在進入

測試程序運行結果

❸ android 熱部署是什麼意思

在 Java 開發領域,熱部署一直是一個難以解決的問題,目前的 Java 虛擬機只能實現方法體的修改熱部署,對於整個類的結構修改,仍然需要重啟虛擬機,對類重新載入才能完成更新操作。對於某些大型的應用來說,每次的重啟都需要花費大量的時間成本。雖然 osgi 架構的出現,讓模塊重啟成為可能,但是如果模塊之間有調用關系的話,這樣的操作依然會讓應用出現短暫的功能性休克。本文將探索如何在不破壞 Java 虛擬機現有行為的前提下,實現某個單一類的熱部署,讓系統無需重啟就完成某個類的更新。

類載入的探索
首先談一下何為熱部署(hotswap),熱部署是在不重啟 Java 虛擬機的前提下,能自動偵測到 class 文件的變化,更新運行時 class 的行為。Java 類是通過 Java 虛擬機載入的,某個類的 class 文件在被 classloader 載入後,會生成對應的 Class 對象,之後就可以創建該類的實例。默認的虛擬機行為只會在啟動時載入類,如果後期有一個類需要更新的話,單純替換編譯的 class 文件,Java 虛擬機是不會更新正在運行的 class。如果要實現熱部署,最根本的方式是修改虛擬機的源代碼,改變 classloader 的載入行為,使虛擬機能監聽 class 文件的更新,重新載入 class 文件,這樣的行為破壞性很大,為後續的 JVM 升級埋下了一個大坑。
另一種友好的方法是創建自己的 classloader 來載入需要監聽的 class,這樣就能控制類載入的時機,從而實現熱部署。本文將具體探索如何實現這個方案。首先需要了解一下 Java 虛擬機現有的載入機制。目前的載入機制,稱為雙親委派,系統在使用一個 classloader 來載入類時,會先詢問當前 classloader 的父類是否有能力載入,如果父類無法實現載入操作,才會將任務下放到該 classloader 來載入。這種自上而下的載入方式的好處是,讓每個 classloader 執行自己的載入任務,不會重復載入類。但是這種方式卻使載入順序非常難改變,讓自定義 classloader 搶先載入需要監聽改變的類成為了一個難題。
不過我們可以換一個思路,雖然無法搶先載入該類,但是仍然可以用自定義 classloader 創建一個功能相同的類,讓每次實例化的對象都指向這個新的類。當這個類的 class 文件發生改變的時候,再次創建一個更新的類,之後如果系統再次發出實例化請求,創建的對象講指向這個全新的類。
下面來簡單列舉一下需要做的工作。
創建自定義的 classloader,載入需要監聽改變的類,在 class 文件發生改變的時候,重新載入該類。
改變創建對象的行為,使他們在創建時使用自定義 classloader 載入的 class。

自定義載入器的實現
自定義載入器仍然需要執行類載入的功能。這里卻存在一個問題,同一個類載入器無法同時載入兩個相同名稱的類,由於不論類的結構如何發生變化,生成的類名不會變,而 classloader 只能在虛擬機停止前銷毀已經載入的類,這樣 classloader 就無法載入更新後的類了。這里有一個小技巧,讓每次載入的類都保存成一個帶有版本信息的 class,比如載入 Test.class 時,保存在內存中的類是 Test_v1.class,當類發生改變時,重新載入的類名是 Test_v2.class。但是真正執行載入 class 文件創建 class 的 defineClass 方法是一個 native 的方法,修改起來又變得很困難。所以面前還剩一條路,那就是直接修改編譯生成的 class 文件。
利用 ASM 修改 class 文件
可以修改位元組碼的框架有很多,比如 ASM,CGLIB。本文使用的是 ASM。先來介紹一下 class 文件的結構,class 文件包含了以下幾類信息,一個是類的基本信息,包含了訪問許可權信息,類名信息,父類信息,介面信息。第二個是類的變數信息。第三個是方法的信息。ASM 會先載入一個 class 文件,然後嚴格順序讀取類的各項信息,用戶可以按照自己的意願定義增強組件修改這些信息,最後輸出成一個新的 class。
首先看一下如何利用 ASM 修改類信息。
清單 1. 利用 ASM 修改位元組碼
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
ClassReader cr = null;
String enhancedClassName = classSource.getEnhancedName();
try {
cr = new ClassReader(new FileInputStream(
classSource.getFile()));
} catch (IOException e) {
e.printStackTrace();
return null;
}
ClassVisitor cv = new EnhancedModifier(cw,
className.replace(".", "/"),
enhancedClassName.replace(".", "/"));
cr.accept(cv, 0);

熱點內容
如何找出蘋果手機已連接wifi密碼 發布:2025-05-13 23:22:52 瀏覽:262
ie10緩存 發布:2025-05-13 23:10:09 瀏覽:458
安卓手機圖標怎麼設置提示 發布:2025-05-13 23:07:56 瀏覽:809
香蕉FTP下載 發布:2025-05-13 23:07:11 瀏覽:940
for循環sql語句 發布:2025-05-13 22:45:49 瀏覽:19
python實用代碼 發布:2025-05-13 22:19:41 瀏覽:843
dede資料庫的配置文件 發布:2025-05-13 22:19:08 瀏覽:970
給字元加密 發布:2025-05-13 22:12:32 瀏覽:975
資料庫系統實現答案 發布:2025-05-13 22:11:57 瀏覽:143
哪個軟體可以共存安卓 發布:2025-05-13 22:10:15 瀏覽:555