第一篇:Pro,Android學習筆記(一七一):說最后x[本站推薦]
Pro Android 學習筆記(一七一):說在最后 文章轉載只能用于非商業性質,且不能帶有虛擬貨幣、積分、注冊等附加條件。轉載須注明出處 http://blog.csdn.net/flowingflying/以及作者@愷風 Wei。
對于《Pro Android 4.0》的學習筆記總算是有始有終,也算是不容易。
Android 已經是相當成熟的操作系統,也正在向物聯網等方向發展。在一兩周之前,有一個課題要寫科技報告,里面談到了 Android 當下的發展趨勢。摘取部分并作了修改,以此作為本系列筆記的結束語。
這個系列始于 2013 年 6 月,終于 2015 年 7 月,超過了 2 年。在這段時間內,我們看到了手機操作系統、應用開發以及手機出現了新發展趨勢。
一、手機操作系統臻于成熟。
一、手機操作系統臻于成熟。
Android 系統的版本更新速度正在放慢,意味著 Android 操作系統已經步入成熟期,無需進行頻繁的系統更新。
原本谷歌公司的 Android 操作系統演進速度很快,在 2009 年發布了 3 個版本(跨兩個大版本);接著從 2010 年至 2013 年的 4 年時間內,一共發布了 8 個版本(跨三個大版本),平均每半年發布一個版本。然而,在 2014 年,谷歌公司只在10 月 15 日發布了新版本 5.0,距離上一個版本發布的時間間隔為 407 日,超過 1年時間(約 13 個月)。
與此同時,Android 操作系統向物聯網方面延伸,衍生出 Android Wear、Android Auto 等操作系統。這些都標志著 Android 操作系統的成熟,并開始橫向覆蓋到其他領域。
對 二、谷歌公司對 Android 系統采取新的管控手段。
系統采取新的管控手段。
新的管控手段意在降低其他對 Android 生態系統的利用,包括在 Android原生操作系統上發展的分支操作系統,以及通過兼容 Dalvik 虛擬機而兼容Android 應用的操作系統。
主要體現在以下兩大方面:其一、停止部分開源應用的更新,新版本轉到閉源中發布;其二、將部分更新轉為服務更新,并通過非開源 API 綁定開發者。而后者關鍵就是 Google Play Services,也稱為 GMS(其 java 包名為com.google.android.gms)。GMS 和一般應用不同,它提供谷歌私有的軟件開發包(SDK)和應用程序編程接口(API)。
三、HTML5 的發展和輕應用的出現提供新的應用生態系統控制點。的發展和輕應用的出現提供新的應用生態系統控制點。
HTML5 經過幾年的發展,雖然在 Web OS 方面未能占據穩固的市場立足點,但在應用,尤其在跨平臺開發上越來越重要,此外通過 HTML5 使用云端能力,將幫助開發者更好更快地進行開發,將注意力集中在應用的創新上。
微信以輕應用的方式提供了另一種建立在平臺之上的平臺模式,并已經成功建立起生態圈。特別在企業應用方面,微信的公眾號發展很快,將占了企業應用的入口。微信提供開發 API,開發者無需關心智能終端的操作系統具體是 Android,iOS 還是 Windows Phone,開發者也無需通過蘋果公司或者谷歌公司的應用商店發布產品,只需申請微信公眾號。在某種意義上,微信是跨平臺的平臺,雖然其不是操作系統,但在各智能終端操作系統的平臺之上建立了開發者社區,應用發布以及電子商務渠道,構成完整的生態系統。
四、4G 移動通信大爆發以及全網通手機的普及。
移動通信大爆發以及全網通手機的普及。
4G 提供的更好更快更寬的流量可能會成為大流量應用(如視頻)發展的新契機。
而全網通手機進一步解耦手機和運營商的捆綁關系,可以同時覆蓋三大運營商的全國用戶,手機制造商可更獨立更自主地開拓各自的終端市場,進一步激活電商渠道。換而言之,BAT 這類互聯網廠商會越來越牛。他們并非代表新興的互聯網科技技術,而是代表野蠻生長(中性詞)的新興互聯網資本,開始掃蕩傳統行業,重塑人們的生活模式。
五、智能手機的巨大銷量帶動了移動終端的器件發展快速。
五、智能手機的巨大銷量帶動了移動終端的器件發展快速。
位芯片開始進入商用,SoC 集成越來越多的功能。2013 年 9 月推出的 iPhone 5S 是第一款采用 64 位架構(ARMv8)的芯片,這標志著手機計算能力的提高。而 SoC 集成度越高,則令手機制造的門檻進一步降低。
本 希望本 Pro Android 學習筆記系列能對大家有所幫助。
學習筆記系列能對大家有所幫助。
Thanks for all.相關鏈接:
我的 Android 開發相關文章
第二篇:Android學習筆記總結初學者必看
Android學習筆記總結
第一步:
Android(1)項目名稱;Build Target程序名稱;Package name程序所支持的最低 SDK 版本代號(2 對應 1.1,3 對應 1.5,4 對應 1.6)
6、運行 Android 項目
打開菜單 “Run”-> “Run Configurations”-> New launch configuration,設置啟動項目名稱,在 Android 選項卡中選擇啟動項目,在 Target 選項卡中設置模擬器
7、創建/使用模擬 SD 卡
創建 SD 卡,運行類似如下命令:mksdcard-l sdcard 512M d:androidsdcard.img 模擬器中使用 SD 卡,在項目配置的 Target 選項卡的 “Additional Emulator Command Line Options” 框中輸入類似如下參數:-sdcard d:androidsdcard.img
8、配置模擬器
運行類似如下命令:android create avd--name android15--target 2。或者直接在菜單 “Window”-> “Android AVD Manager” 中配置模擬器
9、瀏覽模擬 SD 卡中的內容
調試程序,在 DDMS 中選擇 “File Explorer”,在其中的 sdcard 目錄下就是模擬 SD 卡中的內容
10、查看日志 LogCat Window-> Show View-> Other-> Android-> LogCat
11、在模擬器中安裝/卸載 apk 安裝 apk 運行類似如下命令:adb install name.apk;卸載 apk 運行類似如下命令:adb uninstall packagename(注:這里的參數是需要卸載的包名)
12、反編譯 Android 程序
解壓 apk 文件,取出其中的 classes.dex 文件,運行類似如下命令:dexdump.exe-d classes.dex > dump.txt(其意思是將 classes.dex dump 出來,并將反編譯后的代碼保存到指定的文本文件中)
13、人品不好是出現的某些錯誤的解決辦法 如果出現類似如下的錯誤等 no classfiles specified Conversion to Dalvik format failed with error 1 解決辦法:Project-> Clean 出現 Android SDK Content Loader 60%(一直卡在 60%)解決辦法:Project-> 去掉 Build Automatically 前面的勾
14、查看 SDK 源代碼
先想辦法搞到源代碼,如這個地址 http://www.tmdps.cn/android.asp,然后將其解壓到 SDK 根路徑下的 sources 文件夾內即可
二、Android 項目的目錄結構
1、src自動生成 R.java 文件,用于引用資源文件(即 res 目錄下的數據)
3、assets用于放置圖片之類的資源;res/layout用于放置一些常量數據
5、AndroidManifest.xml布局(Layout)和菜單(Menu)介紹
在 Android 中各種布局的應用,以及菜單效果的實現
? 各種布局方式的應用,FrameLayout, LinearLayout, TableLayout, AbsoluteLayout, RelativeLayout
?
為指定元素配置上下文菜單,為應用程序配置選項菜單,以及多級菜單的實現
1、各種布局方式的演示 res/layout/main.xml 代碼
android:layout_height=“wrap_content” android:text=“FrameLayout”>
android:layout_height=“wrap_content” android:text=“Frame Layout”>
android:layout_height=“wrap_content” android:text=“@string/hello” /> android:layout_width=“fill_parent”> android:layout_height=“wrap_content” android:text=“AbsoluteLayout” android:layout_x=“100px” android:layout_y=“100px” /> _Button.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView; public class _Button extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.button); setTitle(“Button”); Button btn =(Button)this.findViewById(R.id.button);btn.setText(“click me”); // setOnClickListener()圖片按鈕控件--> android:layout_width=“wrap_content” android:layout_height=“wrap_content”> _ImageButton.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageButton;import android.widget.TextView; public class _ImageButton extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.imagebutton); setTitle(“ImageButton”); ImageButton imgButton =(ImageButton)this.findViewById(R.id.imageButton);// 設置圖片按鈕的背景 imgButton.setBackgroundResource(R.drawable.icon01); // setOnClickListener()圖片顯示控件--> android:layout_height=“wrap_content”> _ImageView.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle; import android.widget.ImageView; public class _ImageView extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.imageview); setTitle(“ImageView”); ImageView imgView =(ImageView)this.findViewById(R.id.imageView);// 指定需要顯示的圖片 imgView.setBackgroundResource(R.drawable.icon01);} } 5、CheckBox 的 Demo checkbox.xml 代碼 android:orientation=“vertical” android:layout_width=“fill_parent” android:layout_height=“fill_parent”> android:layout_height=“wrap_content” android:id=“@+id/textView” /> android:layout_width=“wrap_content” android:layout_height=“wrap_content”> _DigitalClock.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle; public class _DigitalClock extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.digitalclcok); setTitle(“DigitalClcok”);} } Android(6)日期選擇控件 TimePicker雙狀態按鈕控件 EditText進度條控件 SeekBar支持自動完成功能的可編輯文本控件 MultiAutoCompleteTextView日期選擇控件--> android:layout_width=“wrap_content” android:layout_height=“wrap_content”> _DatePicker.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle; public class _DatePicker extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.datepicker); // 具體的應用可參見對話框中的示例 setTitle(“DatePicker”);} } 2、TimePicker 的 Demo timepicker.xml 代碼 android:orientation=“vertical” android:layout_width=“fill_parent” android:layout_height=“fill_parent”> android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:textOn=“關閉” android:textOff=“打開” /> _ToggleButton.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.ToggleButton; public class _ToggleButton extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.togglebutton); setTitle(“ToggleButton”); final ToggleButton btn =(ToggleButton)this.findViewById(R.id.toggleButton);// setOnClickListener()雙狀態按鈕的按鈕狀態 txt.setText(“按鈕狀態:” + String.valueOf(btn.isChecked()));} });} } 4、EditText 的 Demo edittext.xml 代碼 android:orientation=“vertical” android:layout_width=“fill_parent” android:layout_height=“fill_parent”> style=“?android:attr/progressBarStyleLarge” android:layout_width=“wrap_content” android:layout_height=“wrap_content” /> android:layout_width=“wrap_content” android:layout_height=“wrap_content” /> style=“?android:attr/progressBarStyleSmall” android:layout_width=“wrap_content” android:layout_height=“wrap_content” /> style=“?android:attr/progressBarStyleHorizontal” android:layout_width=“200px” android:layout_height=“wrap_content” android:max=“100” android:progress=“50” android:secondaryProgress=“75” /> _ProgressBar.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle;import android.view.Window; // 另見對話框中的進度條 public class _ProgressBar extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState); // 設置特性以允許在應用程序的標題欄上顯示進度條(條狀)requestWindowFeature(Window.FEATURE_PROGRESS);// 設置特性以允許在應用程序的標題欄上顯示進度條(圓圈狀)requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); this.setContentView(R.layout.progressbar); setTitle(“ProgressBar”); // 在標題欄上顯示進度條(條狀)setProgressBarVisibility(true);// 在標題欄上顯示進度條(圓圈狀) setProgressBarIndeterminateVisibility(true); // 指定進度條的進度 setProgress(50 * 100);setSecondaryProgress(75 * 100); } } 6、SeekBar 的 Demo seekbar.xml 代碼 android:orientation=“vertical” android:layout_width=“fill_parent” android:layout_height=“fill_parent”> android:layout_height=“wrap_content” android:max=“100” android:progress=“50” android:secondaryProgress=“75” /> android:layout_height=“wrap_content” /> android:layout_height=“wrap_content” /> _SeekBar.java 代碼 package com.webabcd.view; import android.app.Activity;import android.os.Bundle;import android.widget.SeekBar;import android.widget.TextView; public class _SeekBar extends Activity implements SeekBar.OnSeekBarChangeListener { SeekBar mSeekBar;TextView mProgressText;TextView mTrackingText; @Override protected void onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState);this.setContentView(R.layout.seekbar); setTitle(“SeekBar”); mSeekBar =(SeekBar)findViewById(R.id.seekBar);// setOnSeekBarChangeListener()-響應拖動進度條事件 mSeekBar.setOnSeekBarChangeListener(this); mProgressText =(TextView)findViewById(R.id.progress);mTrackingText =(TextView)findViewById(R.id.tracking);} // 拖動進度條后,進度發生改變時的回調事件 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch){ mProgressText.setText(progress + “%”);} // 拖動進度條前開始跟蹤觸摸 public void onStartTrackingTouch(SeekBar seekBar){ mTrackingText.setText(“開始跟蹤觸摸”);} // 拖動進度條后停止跟蹤觸摸 public void onStopTrackingTouch(SeekBar seekBar){ mTrackingText.setText(“停止跟蹤觸摸”);} } 7、AutoCompleteTextView 的 Demo autocompletetextview.xml 代碼 Android學習總結 零零碎碎的總結: 1.客戶端的功能邏輯不難,UI界面也不難,但寫UI花的時間是寫功能邏輯的兩倍.2.寫代碼前的思考過程非常重要,即使在簡單的功能,也需要在本子上把該功能的運行過程寫出來.3.要有自己的知識庫,可以是一個工具類,把寫過的,看過的好的代碼放進去,也可以是一個筆記本軟件.因為只有放在知識庫里的東西,才是你最重要的財富.4.如果你想做自由職業者,你需要學英語,因為在國外的盈利比國內多很多.如果你想進大公司,好公司,你需要學英語.你想深入學習android,但中文的android文章太少了,你查查百度,到處都是copy來copy去的hellword,所以,你需要學英語.如果你想出國,你需要學英語.5.Http協議要研究透徹.http的信息頭有什么信息,分別代表什么,信息體有什么信息,代表什么,都要搞的明明白白.scoket也是一樣.6.在eclipse里的layout文件都有graphical Layout.通過這個好好的把UI調整好.7.Android里的junit每次運行都會打包新的apk到設備上跑.效率非常慢.如果是跟android無關的測試,最好自己建立一個單純的java項目做測試.8.面試的時候不要覺得自己提的薪水太高,物以稀為貴明白嗎?不管你的期望薪資多少,都有可能實現,這只是時間問題.9.如果一家小公司通過獵頭找到你,即使公司在小,也比外面那些40,50人的公司還要好.不要覺得公司不行,擔心會倒閉.放心吧,至少活1年是沒問題的.10.不要把自己綁在android上,有空也研究下IOS(最近小弟就準備研究ios,剛買了6本書...).11.移動互聯網最少還有10年的快速增長.android最少還有兩年的快速增長.走android這條路是不會錯的.12.有空多學點開放平臺的SDK.比如新浪微博,騰訊微博,淘寶平臺,支付寶移動支付平臺,快錢移動支付平臺等等..這些都是不愁沒市場的.13.即使技術再差,也要發布一個應用到market上去.因為這樣你才了解做一個應用的邏輯.14.每個月拿到薪水省500-1000元出來.這些錢投在買學習資料,去培訓班上課...在培訓班,花再多的錢也是值得的.15.你真正的價值在項目經驗和對底層的認識上.不要忽略基礎知識.16.如果有空把Android的源代碼看一下.底層的東西很枯燥,但這些很值得學.17..程序員其實是藝術家.代碼重構和設計模式,是非常非常重要的東西,必須要學 18.不要去維護一個項目,要去做一個項目.19.一開始不要輕易去大公司,雖然大公司是可以讓你呆一輩子的.但你的起點低,以后成就也低.20:每天早上提前20分鐘上班,5分鐘把今天的工作計劃寫好.15分鐘用來看各大It論壇的新聞.21:如果以前沒做過java,那就把SSH看下,自己搭建一個小服務器.這是為了接私活用.22:PS一定要學,接私活用.23:多下載市面上好的應用,每天都用,只有這樣你才能了解市場.現在所有的APK都可以反編譯,看源代碼麻煩,但看layout和圖片很容易,所以....你懂的.24.要有羞恥心.25.老板僅僅要求你把東西做完,需求完成.但你必須對自己要更嚴格一點.寫一段代碼,從網上復制一份代碼,并不是可以用就行了,你還必須明白他的原理,為什么這樣就可以?這才是對你最有用的地方,這也是你今后薪資增長的保證.26.要懂得舍得.移動領域發展太快,必要時必須要用錢換時間.不然你會遠遠落后別人(我之前花了4000大洋去培訓班學IOS三天).27.要明白自己想要什么,什么才能最大性價比提高你的能力.對我來說,能讓我提高最大的,就是Android和IOS同時會,并且自己可以做架構設計.28.看android技術書籍最快的學習方法,先通讀一次.然后把書本上的demo一個一個寫出來.不要覺得太容易不去寫.很多東西都是這樣,看起來簡單,但做起來難.最后再對照自己寫出來的程序代碼去理解書本的意思.29.應用和游戲是2個方向,沒有一個公司會同時做游戲又做應用,即使是外包公司,大多也只做一塊.專精一個就可以了.30.每次做完一個項目,要強迫自己做總結,通過這個項目,我學到了什么新技術?犯了哪些 SB錯誤? 31.一家小公司,如果有正式財務部,那肯定是正規的,不要擔心欠薪問題.如果沒有,就說不準了.bbs.12580life.com 01、什么是3G 02、android系統簡介 03、android背景介紹 04、android的framewor簡介 05、兩種虛擬機的比較 06、sdk的下載以及簡介 07、創建android模擬器 08、ddms簡介 09、platform-tools的簡介及常見adb指令 10、android項目的目錄結構 11、android下apk安裝的過程 12、常見的adb指令介紹 13、創建模擬器遇到的常見錯誤 14、電話撥號器 15、點擊事件的四種寫法 16、短信發送器 17、相對布局&單位介紹 18、現形布局&布局的組合 19、表格布局&絕對布局 20、幀布局 21、測試相關概念 22、android下junit測試框架配置 23、logcat簡介 24、保存文件到手機內存 25、android下文件訪問的權限 26、保存文件到SD卡中 27、分析setting源代碼獲取SD卡大小 28、_sharePreference入門 29、xml文件的序列化 30、采用pull解析xml文件 31、采用斷電調試的方法觀察pull解析的的流程 32、android下創建一個sqllite數據庫 33、sql語句實現數據庫的增刪改查 34、系統api實現數據庫的增刪改查&Sqlite3工具的使用 35、數據庫的事物 36、listView入門 37、采用layoutInflater打氣筒創建一個view對象 38、采用數據適配器ArryAdapter 39、常用數據適配器simpleAdapter 40、數據適配器總結 41、內容提供者簡介 42、內容提供者的實現 43、短信的備份 44、插入一條記錄到系統短信應用 45、內容觀察者 46、獲取系統的聯系人信息 47、保存聯系人到系統通訊錄 48、讀取聯系人的一個小細節 49、網絡圖片查看器 50、anr產生的原理&如何避免 51、android消息機制入門 52、網絡html查看器 53、字符亂碼問題的處理 54、采用get方式提交數據到服務器 55、采用post方式提交數據到服務器 56、提交數據到服務器中文亂碼問題的處理 57、采用httpclient提交數據到服務器 58、異步http框架簡介&實現原理 59、異步http框架提交數據到服務器 60、上傳文件到服務器 61、smartimageview&常見開源代碼 62、多線程下載的原理 63、多線程斷點下載的原理 64、多線程java代碼移植到android 65、多線程下載文本頁面的更新 66、顯示意圖激活另一個activity 67、隱式意圖激活另一個activity 68、隱式意圖的配置 69、隱式意圖和顯示意圖的使用場景 70、在不同activity之間數據傳遞 71、activity的聲明周期 72、activity的啟動模式 73、activity橫豎屏切換的聲明周期 74、開啟新的activity獲取他的返回值 75、請求碼和結果碼的作用 76、利用廣播實現ip撥號 77、短信竊聽器 78、自定義廣播時間&發送自定義廣播&廣播接受者優先級 79、采用服務執行長期后臺操作 80、采用服務竊聽電話&服務的聲明周期 81、android進程優先級&為什么使用服務 82、綁定方式開啟服務&調用服務的方法 83、服務的聲明周期(混合開啟 84、采用aidl綁定遠程服務 85、代碼注冊廣播接受者&利用廣播調用服務的辦法 86、加載大圖片到內存 87、獲取圖片exif信息 88、從gallery獲取圖片 89、圖片畫畫板 90、扒開美女衣服 91、圖片的縮放 92、圖片的旋轉 93、圖片的平移&鏡面&倒影效果 94、圖片的合成 95、圖片的顏色處理 96、多媒體播放api簡介 97、人臉識別 98、mediaplayer的生命周期 99、soundpoo簡介 100、sufaceview的生命周期 101、播放在線視頻 102、視頻播放器進度的處理 103、調用系統照相機拍照和錄像 104、采用camera拍照 105、常見對話框 106、notification入門 107、菜單 108、android下的樣式 109、android下的主題 110、代碼編寫ui 111、html創建ui 112、幀動畫 113、代碼創建創建的tween動畫 114、xml文件定義動畫 115、傳感器簡介 116、117、殺死進程 118、apk的安裝 119、應用程序的反編譯 120、動態創建fragment 121、用fragment創建一個選項卡 122、fragment的向下兼容性 123、fragment的生命周期 124、fragment之間的通訊 125、應用程序國際化 04、android的framewor簡介 Wap:wait and play Wireless Makeup Language(WML)精簡的html語言 Applications:android自帶的基本上層應用 Aplication framework:應用程序框架 Librarics: Linux lernel: 05、兩種虛擬機的比較 編譯后文件格式: jvm:.java->.class->.jar dalvik vm:.java->.dex->.odex 基于的架構: jvm:基于棧的架構 dalvik vm:基于寄存器的架構 Cpu直接訪問寄存器因此dalvik虛擬機的效率比jvm高 06、sdk的下載以及簡介 ->獲取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,實際上是eclipse的插件)SDK具體內容 Android 4.2.2(API16) ->SDK Plateform:開發時使用到的jar包->Samples for sdk: ->ARM EABI V7a System Image:模擬器運行時的鏡像->Intel n86 Aton System:模擬器運行時的鏡像->MIPS System Image:模擬器運行時的鏡像->google APIs:google提供的jar包,可以直接使用google提供的一些API->source for android SDK:SDK全部的源代碼 Extrals: ->tools:開發的工具 ->support library:實現高版本的android向下的兼容->google Admed Ads SDK:gongle提供的廣告插件->Analyties App Irackiong SDK:應用的用戶分析->cloud message:云消息 ->gongle play service:收費服務 ->google USB Driver:真實的設備驅動 開發時:基于4.0,兼容2.2、2.3.3 07、創建android模擬器 avd:android virture developer VGA:480*640(電視的標準分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更寬) 08、ddms簡介 ddms:模擬器不支持中文,因此發送中文會顯示不出來 09、platform-tools的簡介及常見adb指令 Android調試橋:內部實現就是socket讓兩個系統之間實現數據交互 ->reset adb:模擬器找不到時候可以重啟->adb device:列出所有的連接的設備->adb kill-server:殺死adb調試橋->adb start-server 啟動adb調試橋 dx.bat:將.class文件打包 10、android項目的目錄結構 一:SDK的目錄結構 ->Samples->Api demo:根據API demo(模擬器上面可以看見)的效果可以在sample中看見 相應的代碼 ->Source:jar包所有的sdk源代碼都在這個文件夾里->SystemImage:系統鏡像 ->temp:下載更新臨時存儲的文件夾,一般是空的->tools:emulater.ext 不同版本的模擬器 二:New Android Application->theme:留給以后作為擴展,現在并沒有太大的作用->target SDK:一般選擇高版本,因為高版本對下兼容 ->mark project as a library:一般不選擇,意思是將這個項目提供一個 jar包供別人使用 三:文件夾目錄 .setting:設置目錄 assets:資產目錄,存放一些文件,這些文件會被原封不動打包到應用程序的 apk中 bin: gen:自動生成的目錄 ->builderConfig.java:生成的配置信息->R.java: Android 4.1.2->android.jar開發環境,jar包 可以在properties中修改,jar包就是SDK 011、Android下apk的安裝過程 一、Android安裝過程分析: ->setContentView:甚至view的對象,把里面的xml文件加載到 ->在project中選擇build automaticly會自動把文件生成字節碼文件,.class $代表的class文件生成的是內部類->dex.bat文件會把.class文件生成.dex文件 ->apk壓縮文件解壓內部內容 ->META-INF: 應用程序的簽名 eclipse的調試簽名文件 ->res:資源文件 ->classes.dex:class文件 ->resources.arsc:資源ID映射 ->android軟件安裝的過程: ->拷貝xxx.apk帶/data/app/xxx-1.apk->在/data/data目錄下創建一個文件夾,文件夾名稱當前應用程序的報名 012、常見adb指令 前提: ->設備連接上電腦而且驅動安裝正常,如果安裝不正常的話,會有黃色的問號顯示; ->設備上打開USB調試; 指令: ->adb device(如果啟動發現這個程序沒有安裝會自動安裝)->adb kill-server->adb start-server->adb uninstall <包名>->adb-s emulator-5554 install c:usersadministratorhello.apk 如果有多個設備的話,如果不指定安裝的是哪個設備程序會報錯->adb push haha.prop /sdcard/haha.txt 將文件移到 (360管家,豌豆莢之類的軟件他們也是用的adb指令,倘若電腦上裝這些軟件的話,會因為兩個adb指令搶端口號而掛掉)(adb版本之間兼容不是很好,經常報錯可以考慮下版本的問題)->adb shell:遠程連接到了android的linux終端 ls:顯示文件夾 ps:顯示正在運行的程序 ping:網絡連通性 013、創建模擬器遇到的常見錯誤 ->路徑最好不要有中文: ->應用安裝不上,或者安裝模擬器的時候開啟一個新的模擬器: 可能是模擬器的資源被占用,模擬器在運行的時候其實占用著硬盤上面的一個文件,這個文件位于工作空間.android/avd/iphone.avd 里面會有鏡像文件,當一個模擬器開啟起來了,就給你創建一個文件夾.knock的文件夾,代表著這個模擬器被鎖定了,如果把模擬器關掉,就沒有程序占據這幾個鏡像資源了,那么這幾個程序就會被自動刪除。通常情況下不會出問題,開啟時候創建文件,關閉時關閉文件,但是當電腦出現不正常狀態時:比如藍屏,停電關機時候這些資源還沒來得及刪除,模擬器就關閉了,因此開啟時這些資源仍在,程序默認模擬器被占用,因此會重新開啟一個模擬器。 ->模擬器沒有信號: 模擬器用socket橋接在電腦上 終結解決方案是給電腦連上網,分配一個IP->常見命令操作: 14、電話撥號器 ->新建文件 ->界面設置:文本框、點擊按鈕 -> ->設置點擊事件:找到空間,然后設置點擊事件,再點擊事件里面獲得了另外一 個空間的數據,激活一個intent->獲得權限:清單文件中添加uses permision 15、點擊事件的四種寫法 ->電話撥號器的優化: 每次撥打電話都會執行的操作是:查找控件,然后找到控件的文本,撥打電 話。其實每次撥打電話文本控件已經創建好了沒有必要每次查找按鈕之后再 查詢控件。 package cn.wqrt.mobile; import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class MainActivity extends Activity { private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);button.setOnClickListener(new MyListener());} private class MyListener implementsandroid.view.View.OnClickListener{ @Override public void onClick(View arg0){ String number = et_number.getText().toString().trim();//去除回車和空格 if(TextUtils.isEmpty(number)){ Toast.makeText(MainActivity.this, “號碼不能為空”, Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(); intent.setAction(intent.ACTION_CALL); intent.setData(Uri.parse(“tel:”+number)); startActivity(intent); } } @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;} } -> 1、點擊事件的四種寫法: ->給按鈕注冊點擊事件:創建一個內部類定義點擊事件。具體代碼見上 button.setOnClickListener(new MyListener()); -> 2、采用匿名內部類創建點擊事件: button.setOnClickListener(new OnClickListener()){ package cn.wqrt.mobile; import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class MainActivity extends Activity { private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0){ // TODO 自動生成的方法存根 callPhone(); } });} @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;} private void callPhone(){ String number = et_number.getText().toString().trim();//去除回車和空格 if(TextUtils.isEmpty(number)){ Toast.makeText(MainActivity.this, “號碼不能為空”, Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(); intent.setAction(intent.ACTION_CALL); intent.setData(Uri.parse(“tel:”+number)); startActivity(intent);} } } -> 3、如果有很多的按鈕點擊事件,建議用這種方式:讓Activity實現點擊 事件的接口,每個按鈕點擊事件都設置成this,讓該類實現 OnClickListener然后進行判斷。package cn.wqrt.mobile; import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);button.setOnClickListener(this);} @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;} private void callPhone(){ String number = et_number.getText().toString().trim();//去除回車和空格 if(TextUtils.isEmpty(number)){ Toast.makeText(MainActivity.this, “號碼不能為空”, Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(); intent.setAction(intent.ACTION_CALL); intent.setData(Uri.parse(“tel:”+number)); startActivity(intent);} @Override public void onClick(View v){ // TODO 自動生成的方法存根 switch(v.getId()){ case R.id.bt_dial: callPhone(); break; } } }-> 4、在布局文件中綁定一個點擊的方法,如果點擊按鈕就會調用這個方法,通 過反射技術試圖調用這個方法 布局文件中設置: package cn.wqrt.mobile; import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class MainActivity extends Activity { private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number); } @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;} public void dialButtonClick(View v){ callPhone();} private void callPhone(){ String number = et_number.getText().toString().trim();//去除回車和空格 if(TextUtils.isEmpty(number)){ Toast.makeText(MainActivity.this, “號碼不能為空”, Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse(“tel:”+number)); startActivity(intent);} } 16、短信發送器 ->界面的設計:兩個large Text,一個Button android:textColor 設置字體顏色 android:singleLine=“true” 設置是否是單行 android:lines=“5” 設置行數 windows下面的顏色是GBR,而android下需要輸入的格式確實 RGB,所以需要轉換 adb默認設置time out為5秒->內容設計:按鈕-文本->判斷->發送 導包的時候千萬別導到gsm包,否則會顯示過時; 發送沒有歷史記錄 package com.example.sms; import java.util.ArrayList; import android.app.Activity;import android.os.Bundle;import android.telephony.SmsManager;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private EditText et_number;private EditText et_content; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button =(Button)findViewById(R.id.bt_send); et_number =(EditText)findViewById(R.id.et_number); et_content =(EditText)findViewById(R.id.et_content); button.setOnClickListener(this);} @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu); return true;} @Override public void onClick(View v){ // TODO 自動生成的方法存根 switch(v.getId()){ case R.id.bt_send: String number = et_number.getText().toString().trim(); String content = et_content.getText().toString().trim(); if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){ Toast.makeText(this, “號碼或者內容不能為空”,Toast.LENGTH_SHORT).show(); return; }else{ SmsManager smsManager = SmsManager.getDefault(); ArrayList for(String str:contents){ smsManager.sendTextMessage(number, null, str, null, null); } } } } } 17、相對布局&單位介紹 ->布局說明: ->同級控件: android:layout_toRightOf=“" android:layout_toLeftOf=”“ android:layout_below=”' android:layout_above=“" android:layout_maginBottom=”“ ->相對父控件: android:ayout_centerInParent=”“ android: layout_centerHorizontal=”“ android:layout_centerVertical=”“ android:layout_alignParentBottom=”“ android:layout_alignParentRight=”“->對齊方式: ->文本顏色:#00000000~#ff000000(argb)文字的透明度->單位介紹: dp也就是dip:device independent pixels(設備獨立像素),是一種與密度無關的像素單位,在每英寸160點的屏幕上,1dp = 1px。不同設備有不同的顯示效果,這個和設備硬件有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素 1.第三篇:Android學習總結
第四篇:黑馬程序員android開發筆記(一)