小菜毛毛技術(shù)分享與大家共同成長 |
摘要: 8.4.2 建立AIDL服務的步驟(2)
在編寫上面代碼時應注意如下兩點:
使用bindService方法來綁定AIDL服務。其中需要使用Intent對象指定AIDL服務的ID,也就是<action>標簽中android:name屬性的值。
在綁定時需要一個ServiceConnection對象。創(chuàng)建ServiceConnection對象的過程中如果綁定成功,系統(tǒng)會調(diào)... 閱讀全文
摘要: http://book.51cto.com/art/201006/207070.htm
建立AIDL服務的步驟(1)
建立AIDL服務要比建立普通的服務復雜一些,具體步驟如下:
(1)在Eclipse Android工程的Java包目錄中建立一個擴展名為aidl的文件。該文件的語法類似于Java代碼,但會稍有不同。詳細介紹見實例52的內(nèi)容。
(2)如果aidl文件的內(nèi)容是正確的,ADT... 閱讀全文
摘要: http://blog.chinaunix.net/u3/90876/showart_2200991.html
在Android中, 每個應用程序都可以有自己的進程. 在寫UI應用的時候, 經(jīng)常要用到Service. 在不同的進程中, 怎樣傳遞對象呢? 顯然, Java中不允許跨進程內(nèi)存共享. 因此傳遞對象, 只能把對象拆分成操作系統(tǒng)能理解的簡單形式, 以達到跨界對象訪問的目的. 在J2EE中,... 閱讀全文
http://zenz.ourcafe.mobi/archives/216
在有APKTool之前,Android軟件的漢化是一件非常痛苦的事情。例如漢化狂人的漢化工具,那都是直接修改二進制文件的,首先 是尋找需要修改的字符串苦難(當然漢化狂人已經(jīng)做得不錯了),然后修改的字符串長度還要注意中文長度不能長過原來的文字……個中郁悶就不細說了。 APKTool可以說是一個革命性的工具,有了APKTool之后,可以說,俺拽軟件的漢化工作到了一個前所未有的簡單程度。 確保你的電腦已經(jīng)安裝了JDK1.6(JRE1.6也可以),而且安裝了一個優(yōu)秀的編輯軟件(推薦UltraEdit),把APKTool解壓到隨便哪個你認為操作起來方便的目錄。如果都好了,我們動手吧: 第一步,把需要漢化的文件(以漢化ColorNote為例)放到APKTool所在目錄,然后命令行進入APKTool目錄,執(zhí)行下面的命令: apktool d ColorNote.apk ColorNote 這句命令的意思是,對ColorNote.apk這個程序進行反編譯,獲得的文件放在當前目錄下的ColorNote目錄中。正常反編譯的話,能看到下面的提示: I: Baksmaling…
I: Decoding resource table…
I: Decoding resources…
I: Copying assets and libs…
反編譯完成,會在APKTool的目錄下面,出現(xiàn)一個名叫ColorNote的目錄,進去看看,是這個樣子的! 用UltraEdit打開這個AndroidManifest.xml看看?哈哈,是純文本文件呀!在打開res目錄中的values中隨便一個文 件看看?也是純文本文件?。∫簿褪钦f,只要一個UltraEdit,我們就可以輕輕松松進行漢化了(就把需要的字符串轉(zhuǎn)換成中文就可以了,也不用考慮長度 了?。┲劣谝獫h化哪些內(nèi)容,這個大家自己研究吧,不用我詳細說,也沒有辦法詳細說的吧?(事實上,除了XML的文本資源文件外,老外寫的很多程序,字符串 都是hard coding在執(zhí)行代碼里面的,APKTool反編譯會得到smali偽代碼,有些在XML資源里面找不到的字符串,去看看smali的代碼吧。) 中間的翻譯過程我們跳過去,例如我們已經(jīng)翻譯好了,就在APKTool目錄下執(zhí)行下面的命令行: apktool b ColorNote 這條命令是告訴APKTool,把這個ColorNote目錄里的東西編譯打包成APK程序 I: Checking whether sources has changed… I: Smaling… I: Checking whether resources has changed… I: Building resources… I: Building apk file… 生成的APK程序在哪里呢?在ColorNote\Dist目錄里面,名字是out.apk 我們把這個out.apk文件簽名之后安裝看看?哈哈!完美中文漢化的俺拽程序來了!(當然,這要看漢化者的功力了。) Popularity: 76% http://www.cn-java.com/www1/?action-viewnews-itemid-3054
...
set CATALINA_HOME=C:\Tomcat4.1.29
set CLASSPATH=%JAVA_HOME%\lib\tools.jar
set CLASSPATH=%JAVA_HOME%\soap-2.3.1\lib\soap.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\javamail-1.3.1\mail.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\jaf-1.0.2\activation.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xercesImpl.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xercesSamples.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xml-apis.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xmlParserAPIs.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\servlet.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\tools.jar
...
如果你的安裝路徑(installation
paths)和上面使用的不同,你需要更正它們,然后關(guān)閉和重啟Tomcat以使它們生效。這樣,你就有為運行SOAP作好了準備。但是現(xiàn)在,我要忘記有
關(guān)的技術(shù)部分,來學一點理論知識。
SOAP意思是簡單對象訪問協(xié)議(Simple Object Access
Protocol)。的確如它的名字一樣,SOAP是很簡單的。它是一個基于XML的協(xié)議,允許程序組件和應用程序彼此使用一種標準的Internet協(xié)
議--HTTP來通訊。SOAP是一種獨立的平臺,它不依賴程序語言,它是簡單的,彈性的,很容易擴展的。目前,應用程序能夠彼此使用一種基于DCOM和
CORBA技術(shù)的遠程過程調(diào)用(RPC)來進行相互通訊,但HTTP不被設(shè)計為這個目的。RPC在Internet上應用是非常困難的,它們會出現(xiàn)許多兼
容性和安全性的問題,因為防火墻和代理服務器通常都會阻斷(block)這些類型的流量。應用程序之間最好的通訊方式是通過HTTP協(xié)議,因為HTTP是
支持所有Internet瀏覽器和服務器的?;谶@個目的,SOAP協(xié)議被創(chuàng)建出來。
那么,它們是如何運作的呢?比如,一個應用程序(A)需要和另一個應用程序(B)在SOAP的幫助下進行彼此通訊。它們將使用下面的框架圖來完成這個
過程:
![]() ![]() ![]() ![]()
做客戶端有必要對soap做基本的了解,開發(fā)手機的程序員可能對web service不是太了解。
soap簡單說是基于xml的,建立在http協(xié)議上的協(xié)議,用來調(diào)用web server提供的service。 這里轉(zhuǎn)載一個對soap的簡單原理,希望對大家有幫助 什么是Web Services 從表面上看,Web service 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調(diào)用的API。也就是說,可以利用編程的方法通過Web來調(diào)用這個應用程序。 對Web service 更精確的解釋: Web services是建立可互操作的分布式應用程序的新平臺。Web service平臺是一套標準,它定義了應用程序如何在Web上實現(xiàn)互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。 不管你的Web service是用什么工具,什么語言寫出來的,只要你用SOAP協(xié)議通過HTTP來調(diào)用它,總體結(jié)構(gòu)都一致。通常,你用你自己喜歡的語言(如VB 6或者VB.NET)來構(gòu)建你的Web service,然后用SOAP Toolkit或者.NET的內(nèi)建支持來把它暴露給Web客戶。于是,任何語言,任何平臺上的客戶都可以閱讀其WSDL文檔,以調(diào)用這個Web service。客戶根據(jù)WSDL描述文檔,會生成一個SOAP請求消息。Web service都是放在Web服務器 (如IIS) 后面的,客戶生成的SOAP請求會被嵌入在一個HTTP POST請求中,發(fā)送到Web服務器來。Web服務器再把這些請求轉(zhuǎn)發(fā)給Web service請求處理器。請求處理器的作用在于,解析收到的SOAP請求,調(diào)用Web service,然后再生成相應的SOAP應答。Web服務器得到SOAP應答后,會再通過HTTP應答的方式把它送回到客戶端。 基本概念 SOAP XML和XSD WSDL(Web Services Description Language) WSML(Web Services Meta Language) 什么時候使用Web Services Web service是創(chuàng)建可互操作的分布式應用程序的新平臺。Web service 的主要目標是跨平臺的可互操作性。為了達到這一目標,Web service 是完全基于XML、XSD等獨立于平臺、獨立于軟件供應商的標準的。 Web service在應用程序跨平臺和跨網(wǎng)絡進行通信的時候是非常有用的。Web service適用于應用程序集成、B2B集成、代碼和數(shù)據(jù)重用,以及通過Web進行客戶端和服務器的通信的場合。 當然,Web service也不是萬能的,你不能到處濫用Web service。在有些情況下,Web service 會降低應用程序的性能,而不會帶來任何好處。例如,一臺機器或一個局域網(wǎng)里面運行的同構(gòu)應用程序就不應該用Web service 進行通信。 如何調(diào)用Web Services 客戶端:取得服務端的服務描述文件WSDL,解析該文件的內(nèi)容,了解服務端的服務信息,以及調(diào)用方式。根據(jù)需要,生成恰當?shù)腟OAP請求消息(指定調(diào)用的方法,已經(jīng)調(diào)用的參數(shù)),發(fā)往服務端。等待服務端返回的SOAP回應消息,解析得到返回值。 服務端:生成服務描述文件,以供客戶端獲取。接收客戶端發(fā)來的SOAP請求消息,解析其中的方法調(diào)用和參數(shù)格式。根據(jù)WSDL和WSML的描述,調(diào)用相應的COM對象來完成指定功能,并把返回值放入SOAP回應消息返回給用戶。 高層接口 使用高層接口,不需要知道SOAP和XML的任何信息,就可以生成和使用一個WebService。Soap Toolkit 2.0通過提供兩個COM對象――SoapClient和SoapServer,來完成這些功能。 在客戶端,只需要生成一個SoapClient實例,并用WSDL作為參數(shù)來調(diào)用其中的mssoapinit方法。SoapClient對象會自動解析 WSDL文件,并在內(nèi)部生成所有Web Service的方法和參數(shù)信息。之后,你就可以像調(diào)用IDispatch接口里的方法一樣,調(diào)用里面所有的方法。在VB或是腳本語言里,你甚至可以直接在SoapClient對象名后面直接加上.方法(參數(shù)…)進行調(diào)用。 低層接口 要使用低層接口,你必須對SOAP和XML有所了解。你可以對SOAP的處理過程進行控制,特別是要做特殊處理的時候。 在客戶端,首先要創(chuàng)建一個HttpConnector對象,負責HTTP連接。設(shè)定Connector的一些頭部信息,比如EndPoinURL和 SoapAction等。如果網(wǎng)絡連接需要使用代理服務器,那也要在這里設(shè)定相關(guān)的信息。接著創(chuàng)建SoapSerializer對象,用于生成Soap消息。按照WSDL里定義,把所有參數(shù)按順序序列化,得到一個完整的SOAP請求消息。該Soap消息,作為Payload通過HttpConnector 被發(fā)送到服務端。最后,生成一個
摘要: Activity
Android中,Activity是所有程序的根本,所有程序的流程都運行在Activity之中,Activity具有自己的生命周期(見http://www.cnblogs.com/feisky/archive/2010/01/01/1637427.html,由系統(tǒng)控制生命周期,程序無法改變,但可以用onSaveInstanceState保存其狀態(tài))。
對于Activity,關(guān)... 閱讀全文
手機上的應用程序,別人的界面設(shè)計的很漂亮,很想知道別人的怎么設(shè)計的,我應該怎么做呢?
在沒有遇到這個工具前 我是通過破解別人的程序去查看他的設(shè)計的。 那天無意中在 tools這個文件夾下發(fā)現(xiàn)這個文件 hierarchyviewer.bat,Google一下發(fā)現(xiàn)幫你分析應用程序UI布局。 現(xiàn)在我們開始使用它吧: 第一步,雙擊(廢話),出現(xiàn)一個灰色的界面,大家不要急,這是因為它沒有發(fā)現(xiàn)運行的android程序呢 第二步:啟動android程序,(或者連接android手機),你會發(fā)現(xiàn)在 Hierarchy Viewer 的 Devices里有 emulator-5554(這個是我的模擬器),然后選擇 start servier 如圖 ![]() 選擇 MainActivity,點擊Load view Hierarchy 如圖 ![]() 你還可以通過左下角的按鈕交換到界面視圖 ![]() 這就是你手機上看到的效果,看到藍色的細線沒有?你可以拖動他,右邊會顯示他的顏色的坐標 你也可以把這些東西導出來,怎么樣 好用吧
摘要: 轉(zhuǎn)載自:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html
在android開發(fā)中ListView是比較常用的組件,它以列表的形式展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適應顯示。抽空把對ListView的使用做了整理,并寫了個小例子,如下圖。
列表的顯示需要三個元素:
1.ListVeiw ... 閱讀全文
javac -classpath的使用:
javac:如果當前你要編譯的java文件中引用了其它的類(比如說:繼承),但該引用類的.class文件不在當前目錄下,這種情況下就需要在javac命令后面加上-classpath參數(shù),通過使用以下三種類型的方法 來指導編譯器在編譯的時候去指定的路徑下查找引用類。 (1).絕對路徑:javac -classpath c:\junit3.8.1\junit.jar Xxx.java (2).相對路徑:javac -classpath ..\junit3.8.1\Junit.javr Xxx.java (3).系統(tǒng)變量:javac -classpath %CLASSPATH% Xxx.java (注意:%CLASSPATH%表示使用系統(tǒng)變量CLASSPATH的值進行查找,這里假設(shè)Junit.jar的路徑就包含在CLASSPATH系統(tǒng)變量中) javac 絕對路徑的使用: javac:假設(shè)你要編譯的類文件名叫:HelloWorld.java,其完全路徑為:D:\java\HelloWorld.java。但你所在的當前目錄是:C:\Documents and Settings\peng>。如果想在這里執(zhí)行編譯,會有什么結(jié)果呢? (1).C:\Documents and Settings\peng> javac HelloWorld.java 這時編譯器會給出如下的錯誤提示信息: error: cannot read: HelloWorld.java 這是因為默認情況下javac是在當前目錄下查找類文件,很明顯這個路徑不是我們存放類文件的地方,所以就會報錯了 (2).C:\Documents and Settings\peng>javac D:\java\HelloWorld.java 這時編譯成功。 所以,只要你執(zhí)行javac命令的目錄不是類文件存放的目錄,你就必須在javac命令中顯式地指定類文件的路徑。 java -classpath的使用: java:假設(shè)我們的CLASSPATH設(shè)置為:D:\peng\java\pro ,在該目錄下有三個文件:HelloWorld.java / HelloWorldExtendsTestCase / HelloWorldExtendsHelloWorld。這三個文件的類聲明分別如下: HelloWorld.java :public class HelloWorld HelloWorldExtendsHelloWorld.java :public class HelloWorldExtendsHelloWorld extends HelloWorld HelloWorldExtendsTestCase.java:public class HelloWorldExtendsTestCase extends junit.framework.TestCase 假設(shè)我們已經(jīng)按照上面關(guān)于javac -classpath和javac 絕對路徑的使用,順利地完成了三個文件地編譯?,F(xiàn)在我們在C:\Documents and Settings\peng>目錄下執(zhí)行這三個.class文件 (1).C:\Documents and Settings\peng>java HelloWorld Hello World 可以看到執(zhí)行成功。為什么我們在 C:\Documents and Settings\peng>執(zhí)行命令,JVM能夠找到D:\peng\java\pro\HelloWorld.class文件呢?這是因為我們配置了系統(tǒng)變量CLASSPATH,并且指向了目錄:D:\peng\java\pro 。所以JVM會默認去該目錄下加載類文件,而不需要指定.class文件的絕對路徑了。 (2).C:\Documents and Settings\peng>java HelloWorldExtendsHelloWorld Hello World 可以看到執(zhí)行成功了。HelloWorldExtendsHelloWorld繼承了HelloWorld類,所以在執(zhí)行時JVM會先查找在CLASSPATH下是否存在一個HelloWorld.class文件,因為我們已經(jīng)成功編譯了HelloWorld 類了,所以可以成功執(zhí)行HelloWorldExtendsHelloWorld.class (3).C:\Documents and Settings\peng>java HelloWorldExtendsTestCase Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/TestCase 可以看到程序拋出異常了,提示找不到junit.framework.TestCase文件。為什么同樣在:\peng\java\pro 下,HelloWorldExtendsHelloWorld.class就可以成功執(zhí)行,而這個就不行了呢?這是因為: junit.framework.TestCase.class文件并不存在于當前目錄下,所以為了能夠讓程序成功運行,我們必須通過指定CLASSPATH的方式,讓JVM可以找到junit.framework.TestCase這個類,如(4): (4). C:\Documents and Settings\peng>java -classpath %CLASSPATH% HelloWorldExtendsTestCase Hello World 總結(jié): (1).何時需要使用-classpath:當你要編譯或執(zhí)行的類引用了其它的類,但被引用類的.class文件不在當前目錄下時,就需要通過-classpath來引入類 (2).何時需要指定路徑:當你要編譯的類所在的目錄和你執(zhí)行javac命令的目錄不是同一個目錄時,就需要指定源文件的路徑(CLASSPATH是用來指定.class路徑的,不是用來指定.java文件的路徑的) [轉(zhuǎn)自: http://blog.csdn.net/pengpenglin/ http://www.aygfsteel.com/pengpenglin/ ] |