Android Studio開發(fā)實(shí)戰(zhàn)(從零基礎(chǔ)到App上線)_第1頁(yè)
Android Studio開發(fā)實(shí)戰(zhàn)(從零基礎(chǔ)到App上線)_第2頁(yè)
Android Studio開發(fā)實(shí)戰(zhàn)(從零基礎(chǔ)到App上線)_第3頁(yè)
Android Studio開發(fā)實(shí)戰(zhàn)(從零基礎(chǔ)到App上線)_第4頁(yè)
Android Studio開發(fā)實(shí)戰(zhàn)(從零基礎(chǔ)到App上線)_第5頁(yè)
已閱讀5頁(yè),還剩952頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

AndroidStudio開發(fā)實(shí)戰(zhàn)從零基礎(chǔ)到App上線(第2版)注:原文檔因內(nèi)容過長(zhǎng)無法上傳,從而部分內(nèi)容改圖片,如需原文檔請(qǐng)下載后留言謝謝支持。目錄TOC\h\h第1章AndroidStudio環(huán)境搭建\h1.1AndroidStudio簡(jiǎn)介\h1.2AndroidStudio的安裝\h1.2.1開發(fā)機(jī)配置要求\h1.2.2安裝依賴的軟件\h1.2.3安裝AndroidStudio\h1.2.4下載Android的SDK\h1.3運(yùn)行小應(yīng)用HelloWorld\h1.3.1創(chuàng)建新項(xiàng)目\h1.3.2編譯項(xiàng)目/模塊\h1.3.3創(chuàng)建模擬器\h1.3.4在模擬器上運(yùn)行App\h1.4App的工程結(jié)構(gòu)\h1.4.1工程目錄說明\h1.4.2編譯配置文件build.gradle\h1.4.3App運(yùn)行配置AndroidManifest.xml\h1.4.4在代碼中操縱控件\h1.5準(zhǔn)備開始\h1.5.1使用快捷鍵\h1.5.2安裝SVN工具\(yùn)h1.5.3安裝常用插件\h1.5.4導(dǎo)入已經(jīng)存在的工程\h1.5.5新建一個(gè)Activity頁(yè)面\h1.6小結(jié)\h第2章初級(jí)控件\h2.1屏幕顯示\h2.1.1像素\h2.1.2顏色\h2.1.3屏幕分辨率\h2.2簡(jiǎn)單布局\h2.2.1視圖View的基本屬性\h2.2.2線性布局LinearLayout\h2.2.3滾動(dòng)視圖ScrollView\h2.3簡(jiǎn)單控件\h2.3.1文本視圖TextView\h2.3.2按鈕Button\h2.3.3圖像視圖ImageView\h2.3.4圖像按鈕ImageButton\h2.4圖形基礎(chǔ)\h2.4.1圖形Drawable\h2.4.2狀態(tài)列表圖形\h2.4.3形狀圖形\h2.4.4九宮格圖片\h2.5實(shí)戰(zhàn)項(xiàng)目:簡(jiǎn)單計(jì)算器\h2.5.1設(shè)計(jì)思路\h2.5.2小知識(shí):日志Log/提示Toast\h2.5.3代碼示例\h2.6小結(jié)\h第3章中級(jí)控件\h3.1其他布局\h3.1.1相對(duì)布局RelativeLayout\h3.1.2框架布局FrameLayout\h3.2特殊按鈕\h3.2.1復(fù)選框CheckBox\h3.2.2開關(guān)按鈕Switch\h3.2.3單選按鈕RadioButton\h3.3適配視圖基礎(chǔ)\h3.3.1下拉框Spinner\h3.3.2數(shù)組適配器ArrayAdapter\h3.3.3簡(jiǎn)單適配器SimpleAdapter\h3.4編輯框\h3.4.1文本編輯框EditText\h3.4.2自動(dòng)完成編輯框AutoCompleteTextView\h3.5活動(dòng)Activity基礎(chǔ)\h3.5.1Activity的生命周期\h3.5.2使用Intent傳遞消息\h3.5.3向下一個(gè)Activity傳遞參數(shù)\h3.5.4向上一個(gè)Activity返回參數(shù)\h3.6實(shí)戰(zhàn)項(xiàng)目:房貸計(jì)算器\h3.6.1設(shè)計(jì)思路\h3.6.2小知識(shí):文本工具TextUtils\h3.6.3代碼示例\h3.7實(shí)戰(zhàn)項(xiàng)目:登錄App\h3.7.1設(shè)計(jì)思路\h3.7.2小知識(shí):提醒對(duì)話框AlertDialog\h3.7.3代碼示例\h3.8小結(jié)\h第4章數(shù)據(jù)存儲(chǔ)\h4.1共享參數(shù)SharedPreferences\h4.1.1共享參數(shù)的基本用法\h4.1.2實(shí)現(xiàn)記住密碼功能\h4.2數(shù)據(jù)庫(kù)SQLite\h4.2.1SQLite的基本用法\h4.2.2數(shù)據(jù)庫(kù)幫助器SQLiteOpenHelper\h4.2.3優(yōu)化記住密碼功能\h4.3SD卡文件操作\h4.3.1SD卡的基本操作\h4.3.2公有存儲(chǔ)空間與私有存儲(chǔ)空間\h4.3.3文本文件讀寫\h4.3.4圖片文件讀寫\h4.4應(yīng)用Application基礎(chǔ)\h4.4.1Application的生命周期\h4.4.2利用Application操作全局變量\h4.5內(nèi)容提供與處理\h4.5.1內(nèi)容提供器ContentProvider\h4.5.2內(nèi)容解析器ContentResolver\h4.5.3內(nèi)容觀察器ContentObserver\h4.6實(shí)戰(zhàn)項(xiàng)目:購(gòu)物車\h4.6.1設(shè)計(jì)思路\h4.6.2小知識(shí):菜單Menu\h4.6.3代碼示例\h4.7小結(jié)\h第5章高級(jí)控件\h5.1日期時(shí)間控件\h5.1.1日期選擇器DatePicker\h5.1.2時(shí)間選擇器TimePicker\h5.2列表類視圖\h5.2.1基本適配器BaseAdapter\h5.2.2列表視圖ListView\h5.2.3網(wǎng)格視圖GridView\h5.3翻頁(yè)類視圖\h5.3.1翻頁(yè)視圖ViewPager\h5.3.2翻頁(yè)標(biāo)題欄PagerTitleStrip/PagerTabStrip\h5.3.3簡(jiǎn)單的啟動(dòng)引導(dǎo)頁(yè)\h5.4碎片F(xiàn)ragment\h5.4.1靜態(tài)注冊(cè)\h5.4.2動(dòng)態(tài)注冊(cè)/碎片適配器FragmentStatePagerAdapter\h5.4.3改進(jìn)的啟動(dòng)引導(dǎo)頁(yè)\h5.5廣播Broadcast基礎(chǔ)\h5.5.1發(fā)送/接收臨時(shí)廣播\h5.5.2定時(shí)器AlarmManager\h5.6實(shí)戰(zhàn)項(xiàng)目:萬年歷\h5.6.1設(shè)計(jì)思路\h5.6.2小知識(shí):月份選擇器MonthPicker\h5.6.3代碼示例\h5.7實(shí)戰(zhàn)項(xiàng)目:日程表\h5.7.1設(shè)計(jì)思路\h5.7.2小知識(shí):震動(dòng)器Vibrator\h5.7.3代碼示例\h5.8小結(jié)\h第6章自定義控件\h6.1自定義視圖\h6.1.1聲明屬性\h6.1.2構(gòu)造對(duì)象\h6.1.3測(cè)量尺寸\h6.1.4寬高尺寸的動(dòng)態(tài)調(diào)整\h6.1.5繪制視圖\h6.2自定義動(dòng)畫\h6.2.1任務(wù)Runnable\h6.2.2下拉刷新動(dòng)畫\h6.2.3圓弧進(jìn)度動(dòng)畫\h6.3自定義對(duì)話框\h6.3.1對(duì)話框Dialog\h6.3.2改進(jìn)的日期對(duì)話框\h6.3.3自定義多級(jí)對(duì)話框\h6.4自定義通知欄\h6.4.1通知推送Notification\h6.4.2進(jìn)度條ProgressBar\h6.4.3遠(yuǎn)程視圖RemoteViews\h6.4.4自定義通知的文本顏色設(shè)定\h6.5服務(wù)Service基礎(chǔ)\h6.5.1Service的生命周期\h6.5.2推送服務(wù)到前臺(tái)\h6.6實(shí)戰(zhàn)項(xiàng)目:手機(jī)安全助手\h6.6.1設(shè)計(jì)思路\h6.6.2小知識(shí):應(yīng)用包管理器PackageManager\h6.6.3代碼示例\h6.7小結(jié)\h第7章組合控件\h7.1標(biāo)簽欄\h7.1.1標(biāo)簽按鈕\h7.1.2實(shí)現(xiàn)底部標(biāo)簽欄\h7.2導(dǎo)航欄\h7.2.1工具欄Toolbar\h7.2.2溢出菜單OverflowMenu\h7.2.3搜索框SearchView\h7.2.4標(biāo)簽布局TabLayout\h7.3橫幅條\h7.3.1自定義指示器\h7.3.2實(shí)現(xiàn)橫幅輪播Banner\h7.3.3仿京東頂?shù)綘顟B(tài)欄的Banner\h7.4增強(qiáng)型列表\h7.4.1循環(huán)視圖RecyclerView\h7.4.2布局管理器LayoutManager\h7.4.3動(dòng)態(tài)更新循環(huán)視圖\h7.5材質(zhì)設(shè)計(jì)庫(kù)\h7.5.1協(xié)調(diào)布局CoordinatorLayout\h7.5.2應(yīng)用欄布局AppBarLayout\h7.5.3可折疊工具欄布局CollapsingToolbarLayout\h7.6實(shí)戰(zhàn)項(xiàng)目:仿支付寶的頭部伸縮特效\h7.6.1設(shè)計(jì)思路\h7.6.2小知識(shí):導(dǎo)航欄的滾動(dòng)標(biāo)志\h7.6.3代碼示例\h7.7實(shí)戰(zhàn)項(xiàng)目:仿淘寶主頁(yè)\h7.7.1設(shè)計(jì)思路\h7.7.2小知識(shí):下拉刷新布局SwipeRefreshLayout\h7.7.3代碼示例\h7.8小結(jié)\h第8章調(diào)試與上線\h8.1調(diào)試工作\h8.1.1模擬器調(diào)試\h8.1.2真機(jī)調(diào)試\h8.1.3導(dǎo)出APK安裝包\h8.2準(zhǔn)備上線\h8.2.1版本設(shè)置\h8.2.2上線模式\h8.2.3數(shù)據(jù)加密\h8.3安全加固\h8.3.1反編譯\h8.3.2代碼混淆\h8.3.3第三方加固及重簽名\h8.4發(fā)布到應(yīng)用商店\h8.4.1注冊(cè)開發(fā)者賬號(hào)\h8.4.2創(chuàng)建并提交應(yīng)用\h8.5小結(jié)\h第9章設(shè)備操作\h9.1攝像頭\h9.1.1表面視圖SurfaceView\h9.1.2使用Camera拍照\(chéng)h9.1.3紋理視圖TextureView\h9.1.4使用Camera2拍照\(chéng)h9.1.5運(yùn)行時(shí)動(dòng)態(tài)授權(quán)管理\h9.2麥克風(fēng)\h9.2.1拖動(dòng)條SeekBar\h9.2.2音量控制\h9.2.3錄音與播音\h9.2.4錄像與放映\h9.3傳感器\h9.3.1傳感器的種類\h9.3.2搖一搖——加速度傳感器\h9.3.3指南針——磁場(chǎng)傳感器\h9.3.4計(jì)步器、感光器和陀螺儀\h9.4手機(jī)定位\h9.4.1開啟定位功能\h9.4.2獲取定位信息\h9.5短距離通信\h9.5.1NFC近場(chǎng)通信\h9.5.2紅外遙控\h9.5.3藍(lán)牙BlueTooth\h9.6實(shí)戰(zhàn)項(xiàng)目:仿微信的發(fā)現(xiàn)功能\h9.6.1設(shè)計(jì)思路\h9.6.2小知識(shí):全球衛(wèi)星導(dǎo)航系統(tǒng)\h9.6.3代碼示例\h9.7小結(jié)\h第10章網(wǎng)絡(luò)通信\h10.1多線程\h10.1.1消息傳遞Message\h10.1.2進(jìn)度對(duì)話框ProgressDialog\h10.1.3異步任務(wù)AsyncTask\h10.1.4異步服務(wù)IntentService\h10.2HTTP接口訪問\h10.2.1網(wǎng)絡(luò)連接檢查\h10.2.2移動(dòng)數(shù)據(jù)格式JSON\h10.2.3JSON串與實(shí)體類自動(dòng)轉(zhuǎn)換\h10.2.4HTTP接口調(diào)用\h10.2.5HTTP圖片獲取\h10.3上傳和下載\h10.3.1下載管理器DownloadManager\h10.3.2文件對(duì)話框\h10.3.3文件上傳\h10.4套接字Socket\h10.4.1網(wǎng)絡(luò)地址InetAddress\h10.4.2Socket通信\h10.5實(shí)戰(zhàn)項(xiàng)目:仿應(yīng)用寶的應(yīng)用更新功能\h10.5.1設(shè)計(jì)思路\h10.5.2小知識(shí):查看APK文件的包信息\h10.5.3代碼示例\h10.6實(shí)戰(zhàn)項(xiàng)目:仿手機(jī)QQ的聊天功能\h10.6.1設(shè)計(jì)思路\h10.6.2小知識(shí):可折疊列表視圖ExpandableListView\h10.6.3代碼示例\h10.7小結(jié)\h第11章事件\h11.1按鍵事件\h11.1.1檢測(cè)軟鍵盤\h11.1.2檢測(cè)物理按鍵\h11.1.3音量調(diào)節(jié)對(duì)話框\h11.2觸摸事件\h11.2.1手勢(shì)事件的分發(fā)流程\h11.2.2手勢(shì)事件處理MotionEvent\h11.2.3手寫簽名\h11.3手勢(shì)檢測(cè)\h11.3.1手勢(shì)檢測(cè)器GestureDetector\h11.3.2飛掠視圖ViewFlipper\h11.3.3手勢(shì)控制橫幅輪播\h11.4手勢(shì)沖突處理\h11.4.1上下滾動(dòng)與左右滑動(dòng)的沖突處理\h11.4.2內(nèi)部滑動(dòng)與翻頁(yè)滑動(dòng)的沖突處理\h11.4.3正常下拉與下拉刷新的沖突處理\h11.5實(shí)戰(zhàn)項(xiàng)目:摳圖神器——美圖變變\h11.5.1設(shè)計(jì)思路\h11.5.2小知識(shí):二維圖像的基本加工\h11.5.3代碼示例\h11.6實(shí)戰(zhàn)項(xiàng)目:虛擬現(xiàn)實(shí)的全景圖庫(kù)\h11.6.1設(shè)計(jì)思路\h11.6.2小知識(shí):三維圖形接口OpenGL\h11.6.3代碼示例\h11.7小結(jié)\h第12章動(dòng)畫\h12.1幀動(dòng)畫\h12.1.1幀動(dòng)畫的實(shí)現(xiàn)\h12.1.2顯示GIF動(dòng)畫\h12.1.3淡入淡出動(dòng)畫\h12.2補(bǔ)間動(dòng)畫\h12.2.1補(bǔ)間動(dòng)畫的種類\h12.2.2補(bǔ)間動(dòng)畫的原理\h12.2.3集合動(dòng)畫\h12.2.4在飛掠橫幅中使用補(bǔ)間動(dòng)畫\h12.3屬性動(dòng)畫\h12.3.1屬性動(dòng)畫的用法\h12.3.2屬性動(dòng)畫組合\h12.3.3插值器和估值器\h12.4矢量動(dòng)畫\h12.4.1矢量圖形\h12.4.2可縮放矢量圖形SVG標(biāo)記\h12.4.3利用屬性動(dòng)畫實(shí)現(xiàn)矢量動(dòng)畫\h12.4.4仿支付寶的支付成功動(dòng)畫\h12.5動(dòng)畫的實(shí)現(xiàn)手段\h12.5.1使用延時(shí)重繪\h12.5.2設(shè)置狀態(tài)參數(shù)\h12.5.3滾動(dòng)器Scroller\h12.6實(shí)戰(zhàn)項(xiàng)目:仿QQ空間的動(dòng)感影集\h12.6.1設(shè)計(jì)思路\h12.6.2小知識(shí):畫布的繪圖層次\h12.6.3代碼示例\h12.7小結(jié)\h第13章多媒體\h13.1相冊(cè)\h13.1.1畫廊Gallery\h13.1.2圖像切換器ImageSwitcher\h13.1.3圖片查看器——青青相冊(cè)\h13.2音頻播放\h13.2.1鈴聲Ringtone\h13.2.2聲音池SoundPool\h13.2.3音軌錄播AudioTrack\h13.3視頻播放\h13.3.1視頻視圖VideoView\h13.3.2媒體控制條MediaController\h13.3.3自定義播放控制條\h13.4多窗口\h13.4.1分屏——多窗口模式\h13.4.2畫中畫——特殊的多窗口\h13.4.3自定義懸浮窗\h13.4.4截圖和錄屏\h13.5實(shí)戰(zhàn)項(xiàng)目:影視播放器——愛看劇場(chǎng)\h13.5.1設(shè)計(jì)思路\h13.5.2小知識(shí):豎屏與橫屏切換\h13.5.3代碼示例\h13.6實(shí)戰(zhàn)項(xiàng)目:音樂播放器——浪花音樂\h13.6.1設(shè)計(jì)思路\h13.6.2小知識(shí):可變字符串SpannableString\h13.6.3代碼示例\h13.7小結(jié)\h第14章融合技術(shù)\h14.1網(wǎng)頁(yè)集成\h14.1.1資產(chǎn)管理器AssetManager\h14.1.2網(wǎng)頁(yè)視圖WebView\h14.1.3簡(jiǎn)單瀏覽器\h14.2JNI開發(fā)\h14.2.1NDK環(huán)境搭建\h14.2.2創(chuàng)建JNI接口\h14.2.3JNI實(shí)現(xiàn)加解密\h14.3局域網(wǎng)共享\h14.3.1無線網(wǎng)絡(luò)管理器WifiManager\h14.3.2連接指定WiFi\h14.3.3開關(guān)熱點(diǎn)\h14.3.4點(diǎn)對(duì)點(diǎn)藍(lán)牙傳輸\h14.4實(shí)戰(zhàn)項(xiàng)目:共享經(jīng)濟(jì)弄潮兒——WiFi共享器\h14.4.1設(shè)計(jì)思路\h14.4.2小知識(shí):NetBIOS協(xié)議\h14.4.3代碼示例\h14.5實(shí)戰(zhàn)項(xiàng)目:筆墨飄香之電子書架\h14.5.1設(shè)計(jì)思路\h14.5.2小知識(shí):PDF文件渲染器PdfRenderer\h14.5.3代碼示例\h14.6小結(jié)\h第15章第三方開發(fā)包\h15.1地圖SDK\h15.1.1查看簽名信息\h15.1.2百度地圖\h15.1.3高德地圖\h15.2分享SDK\h15.2.1QQ分享\h15.2.2微信分享\h15.3支付SDK\h15.3.1支付寶支付\h15.3.2微信支付\h15.4語(yǔ)音SDK\h15.4.1文字轉(zhuǎn)語(yǔ)音TextToSpeech\h15.4.2語(yǔ)音識(shí)別\h15.4.3語(yǔ)音合成\h15.5實(shí)戰(zhàn)項(xiàng)目:仿滴滴打車\h15.5.1設(shè)計(jì)思路\h15.5.2小知識(shí):評(píng)分條RatingBar\h15.5.3代碼示例\h15.6小結(jié)\h第16章性能優(yōu)化\h16.1布局文件優(yōu)化\h16.1.1減少重復(fù)布局\h16.1.2自適應(yīng)調(diào)整布局\h16.1.3自定義窗口主題\h16.2內(nèi)存泄漏處理\h16.2.1內(nèi)存泄漏的檢測(cè)\h16.2.2內(nèi)存泄漏的發(fā)生\h16.2.3內(nèi)存泄漏的預(yù)防\h16.3線程池管理\h16.3.1普通線程池\h16.3.2定時(shí)器線程池\h16.4省電模式\h16.4.1檢測(cè)當(dāng)前電量\h16.4.2檢測(cè)屏幕開關(guān)\h16.4.3休眠模式對(duì)App的影響\h16.5實(shí)戰(zhàn)項(xiàng)目:網(wǎng)絡(luò)圖片緩存框架\h16.5.1設(shè)計(jì)思路\h16.5.2小知識(shí):LRU緩存策略\h16.5.3代碼示例\h16.6小結(jié)\h附錄\h附錄一仿流行App的常用功能\h附錄二Android各版本的新增功能說明\h附錄三手機(jī)硬件與App開發(fā)的關(guān)聯(lián)\h附錄四專業(yè)術(shù)語(yǔ)索引第1章

AndroidStudio環(huán)境搭建本章主要介紹如何在個(gè)人電腦上安裝AndroidStudio和相應(yīng)的配套環(huán)境,并通過一個(gè)簡(jiǎn)單的App“HelloWorld”演示AndroidStudio的常用操作與App開發(fā)、運(yùn)行的流程,還介紹了App的工程結(jié)構(gòu)和開發(fā)過程中的準(zhǔn)備工作。1.1AndroidStudio簡(jiǎn)介Android是基于Linux的移動(dòng)設(shè)備操作系統(tǒng),中文名為安卓,主要用于智能手機(jī)與平板電腦,現(xiàn)已拓展至互聯(lián)網(wǎng)電視、可穿戴設(shè)備、車載終端、智能家居等等。Android與iOS同為智能手機(jī)市場(chǎng)的兩大操作系統(tǒng),但安卓系統(tǒng)的全球市場(chǎng)份額大幅領(lǐng)先于蘋果。在中國(guó)大陸,Android的市場(chǎng)份額更是遙遙領(lǐng)先,據(jù)2018年4月的移動(dòng)系統(tǒng)調(diào)研報(bào)告,Android在中國(guó)的市場(chǎng)份額為86%,其余份額為iOS。早期,在Android下開發(fā)App主要使用Eclipse和基于Eclipse的ADT。不過Eclipse畢竟是為Java工程而生的開發(fā)平臺(tái),并非專門用于Android,所以先天性不足難以避免。自2015年之后,谷歌公司便停止了ADT的版本更新,轉(zhuǎn)而重點(diǎn)打造自家的AndroidStudio。AndroidStudio是谷歌公司推出的Android應(yīng)用開發(fā)環(huán)境,與基于Eclipse的ADT不同,AndroidStudio是個(gè)全新的開發(fā)環(huán)境,擁有更強(qiáng)大的功能和更高效的性能。本文使用的AndroidStudio為2018年4月發(fā)布的3.1.2版本,同時(shí)支持Windows、MacOSX和Linux。使用AndroidStudio比起使用Eclipse開發(fā)有如下好處:(1)AndroidStudio使用v7庫(kù)與design庫(kù)等只需增加一行配置,而Eclipse要想使用這些庫(kù)得引用整個(gè)工程。(2)高版本的SDK與NDK只支持AndroidStudio,不支持Eclipse。(3)更多新功能只能在AndroidStudio中運(yùn)用,如自動(dòng)保存、多渠道打包、整合版本管理、支持預(yù)覽drawable圖形文件等。1.2AndroidStudio的安裝既然AndroidStudio有眾多優(yōu)點(diǎn),又是App開發(fā)大趨勢(shì)的主流工具,接下來就讓我們一步一步地在自己的電腦上安裝AndroidStudio。1.2.1開發(fā)機(jī)配置要求工欲善其事,必先利其器。要想保證AndroidStudio的運(yùn)行速度,開發(fā)用的電腦配置就要跟上。現(xiàn)在一般用筆記本電腦開發(fā)App,下面是開發(fā)機(jī)的基本配置:(1)內(nèi)存最低要求4GB,推薦8GB,越大越好。(2)CPU要求1.5GHz以上,越快越好。(3)硬盤要求系統(tǒng)盤剩余空間10GB以上,越大越好。(4)要求帶無線網(wǎng)卡、攝像頭,USB與麥克風(fēng)正常使用。(5)如果操作系統(tǒng)是Windows,那么至少為Windows7,不支持WindowsXP。1.2.2安裝依賴的軟件AndroidStudio作為Android應(yīng)用的開發(fā)環(huán)境,仍然依賴于JDK、SDK和NDK三種開發(fā)工具。1.JDKJDK是Java語(yǔ)言的編譯器,全稱為JavaDevelopmentKit,即Java開發(fā)工具包。因?yàn)锳ndroid應(yīng)用采用Java語(yǔ)言開發(fā),所以開發(fā)機(jī)上要先安裝JDK,下載地址為/technetwork/java/javase/downloads/index.html。JDK建議安裝1.8及以上版本,原因是不同的Android版本對(duì)JDK有相應(yīng)的要求,如Android5.0默認(rèn)使用jdk1.7編譯,Android7.0默認(rèn)使用jdk1.8編譯。如果JDK為1.6或1.7,而SDK為最新版本,就可能導(dǎo)致如下問題:(1)創(chuàng)建項(xiàng)目后,瀏覽布局文件設(shè)計(jì)圖時(shí)會(huì)報(bào)錯(cuò)AndroidNrequirestheIDEtoberunningwithJava1.8orlater。(2)編譯項(xiàng)目失敗,提示錯(cuò)誤com/android/dx/command/dexer/Main:Unsupportedmajor.minorversion52.0。(3)運(yùn)行App失敗,提示錯(cuò)誤compileSdkVersion'android-24'requiresJDK1.8orlatertocompile.裝好JDK后,還要在環(huán)境變量的系統(tǒng)變量中添加JAVA_HOME,取值為JDK的安裝目錄,例如D:\ProgramFiles(x86)\Java\jdk1.8.0_102。添加系統(tǒng)變量CLASSPATH,取值為.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin。并在系統(tǒng)變量Path末尾添加;%JAVA_HOME%\bin。2.SDKSDK是Android應(yīng)用的編譯器,全稱為SoftwareDevelopmentKit,即軟件開發(fā)工具包。SDK提供了App開發(fā)的常用工具合集,主要包括:build-tools目錄,存放各版本Android的各種編譯工具。docs目錄,存放開發(fā)說明文檔。extras\android目錄,存放兼容低版本的新功能支持庫(kù),比如android-support-v4.jar、v7的各種支持庫(kù)、v13以上兼容庫(kù)等。platforms目錄,存放各版本Android的資源文件。platform-tools目錄與tools目錄,存放常用的開發(fā)輔助工具,如數(shù)據(jù)庫(kù)管理工具sqlite3.exe、模擬器管理工具emulator.exe。samples目錄,存放各版本Android常用功能的demo源碼。sources目錄,存放各版本Android的API開放接口源碼。system-images目錄,存放模擬器各版本的系統(tǒng)鏡像與管理工具。SDK可以單獨(dú)安裝,也可以與AndroidStudio一起安裝,單獨(dú)安裝的下載頁(yè)面入口地址是/。建議通過AndroidStudio安裝SDK,因?yàn)檫@樣避免了一些兼容性與環(huán)境設(shè)置問題。無論是單獨(dú)安裝還是一起安裝,裝好SDK后都要在環(huán)境變量的系統(tǒng)變量中添加ANDROID_HOME,取值為SDK的安裝目錄,例如D:\Android\sdk。并在系統(tǒng)變量Path末尾添加;%ANDROID_HOME%\tools。3.NDKNDK是C/C++代碼的編譯器,全稱為NativeDevelopmentKit,意即原生開發(fā)工具包。該工具包主要供JNI接口使用,先把C/C++代碼編譯成so庫(kù),然后由Java代碼通過JNI接口調(diào)用so庫(kù)。NDK的詳細(xì)安裝步驟見第14章的“14.2.1NDK環(huán)境搭建”。裝好NDK后,要在環(huán)境變量的系統(tǒng)變量中添加NDK_ROOT,取值為NDK的安裝目錄,例如D:\Android\android-ndk-r17。然后在系統(tǒng)變量Path末尾添加;%NDK_ROOT%。1.2.3安裝AndroidStudio2016年12月8日,谷歌開發(fā)者的中文網(wǎng)站上線了。國(guó)內(nèi)開發(fā)者可直接在該網(wǎng)站下載AndroidStudio,詳細(xì)的下載頁(yè)面是/studio/index.html,在這里可以找到AndroidStudio的使用教程。雙擊下載完成的AndroidStudio安裝程序,彈出安裝界面,如圖1-1所示。全部勾選安裝界面中的選項(xiàng),然后單擊Next按鈕。進(jìn)入下一頁(yè)的安裝路徑配置頁(yè)面,如圖1-2所示,建議將AndroidStudio裝在除系統(tǒng)盤外的其他磁盤(比如D盤),然后單擊Next按鈕。接下來一路單擊Next按鈕,直到彈出最后一頁(yè),單擊Install按鈕,等待安裝過程進(jìn)行。圖1-1AndroidStudio的安裝界面圖1-2選擇AndroidStudio的安裝目錄安裝完畢會(huì)跳到AndroidStudio的安裝向?qū)Ы缑?,如圖1-3所示。單擊Next按鈕進(jìn)入下一頁(yè),如圖1-4所示。這里保持Standard選項(xiàng),單擊Next按鈕;在配置界面確認(rèn)SDK的安裝路徑是否正確,確認(rèn)完畢繼續(xù)單擊Next按鈕;在最后一個(gè)向?qū)Ы缑鎲螕鬎inish按鈕,等待設(shè)置操作。接下來的下載界面會(huì)自動(dòng)跳轉(zhuǎn)到谷歌網(wǎng)站更新組件,這里直接單擊Cancel按鈕取消下載,然后單擊Finish按鈕結(jié)束設(shè)置。最后彈出WelcometoAndroidStudio歡迎界面,如圖1-5所示。單擊第一項(xiàng)的StartanewAndroidStudioproject即可開始你的Android開發(fā)之旅。圖1-3安裝向?qū)б粓D1-4安裝向?qū)ФD1-5AndroidStudio的歡迎界面注意,配置過程可能發(fā)生如下錯(cuò)誤提示:(1)第一次打開AndroidStudio可能會(huì)報(bào)錯(cuò)UnabletoaccessAndroidSDKadd-onlist,這個(gè)界面不用理會(huì),單擊Cancel按鈕即可。進(jìn)入AndroidStudio主界面后,依次選擇菜單File→ProjectStructure→SDKLocation,在彈出的窗口中分別設(shè)置JDK、SDK、NDK的路徑。設(shè)置完畢后再打開AndroidStudio就不會(huì)報(bào)錯(cuò)了。(2)已經(jīng)按照安裝步驟正確安裝,運(yùn)行AndroidStudio卻總是打不開。請(qǐng)檢查電腦上是否開啟了防火墻,建議關(guān)閉系統(tǒng)防火墻及所有殺毒軟件的防火墻。關(guān)了防火墻后再重新打開AndroidStudio試試。1.2.4下載Android的SDK從AndroidStudio3.0開始,官網(wǎng)放出來的AndroidStudio安裝包都不帶SDK,因此首次安裝AS的開發(fā)者還要另行下載App開發(fā)需要的SDK。此外,隨著Android版本的更新?lián)Q代,編譯工具與平臺(tái)工具等也需時(shí)常在線升級(jí),故而接下來介紹如何下載最新的SDK平臺(tái)及相關(guān)工具。在AndroidStudio主界面,依次選擇菜單Tools→SDKManager,菜單路徑如圖1-6所示。圖1-6打開SDKManager的菜單路徑此時(shí)彈出AndroidSDK的管理界面,窗口右邊是一大片的SDK配置信息,初始畫面如圖1-7所示。其中AndroidSDKLocation一欄可單擊右側(cè)的Edit鏈接,進(jìn)而選擇SDK下載后的保存路徑。其下的三個(gè)選項(xiàng)卡默認(rèn)顯示SDKPlatforms,也就是各個(gè)SDK平臺(tái)的版本列表,勾選每個(gè)列表項(xiàng)左邊的復(fù)選框,則表示需要下載該版本的SDK平臺(tái),然后單擊OK按鈕即可自動(dòng)進(jìn)行SDK的下載安裝操作。也可單擊中間的選項(xiàng)卡SDKTools,單擊后切換到SDK工具的管理列表,如圖1-8所示。在這個(gè)工具管理界面,能夠在線升級(jí)編譯工具BuildTools、平臺(tái)工具PlatformTools,以及開發(fā)者需要的其他工具。圖1-7SDK平臺(tái)的管理列表圖1-8SDK工具的管理列表1.3運(yùn)行小應(yīng)用HelloWorld成功安裝AndroidStudio后,打開其界面會(huì)發(fā)現(xiàn)有一堆菜單和圖標(biāo),對(duì)于這個(gè)陌生的開發(fā)環(huán)境,讀者可能會(huì)有不知所措的感覺?,F(xiàn)在不再逐一講解每個(gè)菜單和圖標(biāo)的作用,直接開始第一個(gè)App——HelloWorld,讓我們?cè)趯?shí)踐中邊學(xué)邊用,更好地理解和吸收。1.3.1創(chuàng)建新項(xiàng)目打開AndroidStudio,依次選擇菜單File→New→NewProject,彈出CreateNewProject窗口,如圖1-9所示。在Applicationname欄輸入應(yīng)用名稱,在CompanyDomain欄輸入公司域名,下面會(huì)自動(dòng)合成工程的包名,選擇好項(xiàng)目工程的保存目錄,單擊Next按鈕。下一個(gè)界面是目標(biāo)設(shè)備界面,如圖1-10所示。該界面可選擇App期望運(yùn)行在什么設(shè)備上,以及運(yùn)行App所需的SDK最低版本號(hào),MinimunSDK右下方的文字提示當(dāng)前版本號(hào)支持的設(shè)備市場(chǎng)份額。這里不做變動(dòng),按照默認(rèn)勾選的PhoneandTablet即可,最低版本號(hào)也是默認(rèn)的API16(支持設(shè)備的市場(chǎng)份額為99.2%,能夠滿足絕大部分機(jī)型)。圖1-9創(chuàng)建新項(xiàng)目圖1-10指定目標(biāo)設(shè)備然后單擊Next按鈕,進(jìn)入下一個(gè)界面,如圖1-11所示。該界面提示請(qǐng)選擇初始界面風(fēng)格,這里還是保持默認(rèn)的選項(xiàng)EmptyActivity,單擊Next按鈕。下一個(gè)界面是入口設(shè)置界面,如圖1-12所示。該界面可輸入活動(dòng)名稱(ActivityName)與布局名稱(LayoutName),正常情況使用默認(rèn)名稱即可,單擊OK按鈕,等待工程創(chuàng)建。圖1-11指定Activity界面的風(fēng)格圖1-12設(shè)置入口界面的名稱工程創(chuàng)建完畢后,AndroidStudio自動(dòng)打開activity_main.xml與MainActivity.java,并默認(rèn)展示MainActivity.java的源碼,如圖1-13所示。圖1-13默認(rèn)創(chuàng)建的MainActivityMainActivity.java上方的標(biāo)簽表示該文件的路徑結(jié)構(gòu),注意源碼左側(cè)有一列標(biāo)簽,從上到下依次是Project、Structure、Captures、Favorites。單擊Project標(biāo)簽,左側(cè)會(huì)展開小窗口表示該項(xiàng)目工程的目錄結(jié)構(gòu),如圖1-14所示。單擊Structure標(biāo)簽,左側(cè)會(huì)展開小窗口表示該代碼的內(nèi)部方法結(jié)構(gòu),如圖1-15所示。圖1-14HelloWorld的工程結(jié)構(gòu)圖1-15MainActivity的方法結(jié)構(gòu)看完代碼文件再來看布局文件,單擊activity_main.xml標(biāo)簽,切換到布局文件設(shè)計(jì)展示界面,如圖1-16所示??梢钥吹阶髠?cè)多了一列Palette窗口,內(nèi)部是各種布局與控件列表。在Palette窗口下方有兩個(gè)標(biāo)簽,分別是Design(默認(rèn)選中,表示設(shè)計(jì)圖)和Text(表示源代碼)。單擊Text標(biāo)簽,切換到布局文件的源碼界面,如圖1-17所示。這個(gè)布局文件是標(biāo)準(zhǔn)的XML格式,內(nèi)部定義了App頁(yè)面上包含的各種控件元素及其排列組合方式。圖1-16activity_main.xml的設(shè)計(jì)圖圖1-17activity_main.xml的源代碼1.3.2編譯項(xiàng)目/模塊AndroidStudio與Eclipse一樣,如果代碼沒有報(bào)錯(cuò),AndroidStudio就會(huì)自動(dòng)編譯,我們只需直接運(yùn)行項(xiàng)目即可。當(dāng)然有時(shí)候開發(fā)者想手動(dòng)重新編譯,有以下3種編譯方式:(1)選擇菜單Build→MakeProject,編譯整個(gè)項(xiàng)目下的所有模塊。(2)選擇菜單Build→MakeModule***,編譯指定名稱的模塊。(3)選擇菜單Build→CleanProject,然后選擇菜單Build→RebuildProject,先清理項(xiàng)目,再對(duì)整個(gè)項(xiàng)目重新編譯。下面先認(rèn)識(shí)一下任務(wù)欄上的幾個(gè)常用圖標(biāo),后面會(huì)經(jīng)常用到它們。圖1-18任務(wù)欄上的常用圖標(biāo)在圖1-18中,倒數(shù)第4個(gè)豎屏圖標(biāo)是AVDManager按鈕,單擊該按鈕會(huì)彈出模擬器的管理窗口;倒數(shù)第5個(gè)向下箭頭圖標(biāo)是SDKManager,單擊該按鈕會(huì)彈出SDK版本的管理窗口。1.3.3創(chuàng)建模擬器圖1-19運(yùn)行App選擇接入設(shè)備所謂模擬器,是指在電腦上構(gòu)造一個(gè)演示窗口,模擬手機(jī)屏幕上的App運(yùn)行效果。App通過編譯后,要選擇一個(gè)接入設(shè)備來運(yùn)行,依次選擇菜單Run→Run'app'(也可按快捷鍵Shift+F10),AndroidStudio會(huì)彈出新窗口SelectDeploymentTarget,如圖1-19所示。對(duì)初學(xué)者來說,一開始沒有可用的模擬器,得創(chuàng)建新模擬器,單擊CreateNewEmulator按鈕,彈出模擬器的配置界面,如圖1-20所示。按照默認(rèn)配置即可,單擊Next按鈕。下一個(gè)界面是SDK版本的選擇界面,如圖1-21所示。單擊第3個(gè)標(biāo)簽OtherImages,在列表中選擇第一個(gè)Lollipop(即Android5.1),表示接下來創(chuàng)建的模擬器是基于Android5.1系統(tǒng)的。然后單擊Next按鈕,進(jìn)入最后的確認(rèn)界面,在確認(rèn)界面右下角單擊Finish按鈕,等待模擬器的創(chuàng)建。圖1-20選擇模擬器的分辨率圖1-21選擇模擬器的SDK版本1.3.4在模擬器上運(yùn)行App模擬器創(chuàng)建完成后,重新依次選擇菜單Run→Run'app',這時(shí)彈出的窗口中會(huì)出現(xiàn)剛才創(chuàng)建的模擬器,名稱為Nexus4API22,如圖1-22所示。圖1-22接入設(shè)備界面出現(xiàn)新創(chuàng)建的模擬器選中該模擬器,單擊OK按鈕,等待AndroidStudio啟動(dòng)模擬器。關(guān)于模擬器的啟動(dòng)結(jié)果,可以查看主界面下方的提示窗口,如圖1-23所示。提示窗口有左右兩個(gè)小窗口,左側(cè)窗口的左上角有一個(gè)logcat標(biāo)簽,用于展示App的運(yùn)行日志;右側(cè)窗口的右下角有一個(gè)GradleConsole標(biāo)簽,用于展示App工程的編譯與啟動(dòng)情況。圖1-23App運(yùn)行結(jié)果跟蹤窗口如果在GradleConsole窗口提示編譯或啟動(dòng)失敗,就按照提示信息進(jìn)行處理。如果GradleConsole窗口提示成功,等待模擬器啟動(dòng)完成后,就會(huì)出現(xiàn)類似手機(jī)的模擬器界面,如圖1-24所示。把模擬器屏幕下方中間的解鎖圖像向上拖動(dòng),使得屏幕解鎖成功,這時(shí)進(jìn)入App的啟動(dòng)界面HelloWorld,如圖1-25所示。圖1-24模擬器啟動(dòng)完成屏幕圖1-25HelloWorld的啟動(dòng)界面如果App啟動(dòng)界面正常展示,那么恭喜你,第一個(gè)HelloWorldApp就這樣成功了。都說萬事開頭難,前面克服了各種困難,終于搭建好AndroidStudio的開發(fā)環(huán)境,并且成功運(yùn)行了第一個(gè)App——HelloWorld,不過這只是萬里長(zhǎng)征的第一步,接下來還有更奇妙的Android世界等著我們?nèi)ヌ剿鳌?.4App的工程結(jié)構(gòu)上一節(jié)在模擬器上成功地運(yùn)行了第一個(gè)App(HelloWorld),接下來好好研究一下它的工程結(jié)構(gòu)。每個(gè)App的工程結(jié)構(gòu)都差不多,只要掌握了基本結(jié)構(gòu),后面開發(fā)起來就會(huì)得心應(yīng)手。1.4.1工程目錄說明AndroidStudio的工程創(chuàng)建分兩個(gè)層級(jí):第一個(gè)層級(jí)通過菜單File→New→NewProject創(chuàng)建,這里的新項(xiàng)目是指新的工作空間,對(duì)應(yīng)Eclipse的workspace;第二個(gè)層級(jí)通過菜單File→New→NewModule創(chuàng)建,這里的新模塊是指一個(gè)單獨(dú)的App工程,對(duì)應(yīng)Eclipse的project。第一次運(yùn)行AndroidStudio都是選擇NewProject,表示先創(chuàng)建一個(gè)工作空間;后面還想創(chuàng)建新的App工程時(shí),只需選擇NewModule,表示在當(dāng)前工作空間下新建一個(gè)App工程。例如,圖1-26是之前HelloWorld工程的目錄結(jié)構(gòu)圖。圖1-26HelloWorld工程的目錄結(jié)構(gòu)圖從結(jié)構(gòu)圖中可以看到,該工程下面有兩個(gè)目錄:一個(gè)是app,另一個(gè)是GradleScripts。其中,app下面又有3個(gè)子目錄,功能說明如下:(1)manifests子目錄,下面只有一個(gè)xml文件,即AndroidManifest.xml,是App的運(yùn)行配置文件。(2)java子目錄,下面有3個(gè)com.example.hellorworld包,其中第一個(gè)包存放的是App工程的java源代碼,后面兩個(gè)包存放的是測(cè)試用的Java代碼。(3)res子目錄,存放的是App工程的資源文件。res子目錄下又有4個(gè)子目錄:drawable目錄存放的是圖形描述文件與用戶圖片。layout目錄存放的是App頁(yè)面的布局文件。mipmap目錄存放的是啟動(dòng)圖標(biāo)。values目錄存放的是一些常量定義文件,比如字符串常量strings.xml、像素常量dimens.xml、顏色常量colors.xml、樣式風(fēng)格定義styles.xml等。GradleScripts下面主要是工程的編譯配置文件,主要有:(1)build.gradle,該文件分為項(xiàng)目級(jí)與模塊級(jí)兩種,用于描述App工程的編譯規(guī)則。(2),該文件用于描述java文件的代碼混淆規(guī)則。(3)perties,該文件用于配置編譯工程的命令行參數(shù),一般無須改動(dòng)。(4)settings.gradle,配置哪些模塊在一起編譯。初始內(nèi)容為include':app',表示只編譯App模塊。(5)perties,項(xiàng)目的本地配置,一般無須改動(dòng)。該文件是在工程編譯時(shí)自動(dòng)生成的,用于描述開發(fā)者本機(jī)的環(huán)境配置,比如SDK的本地路徑、NDK的本地路徑等。1.4.2編譯配置文件build.gradle項(xiàng)目級(jí)別的build.gradle一般無須改動(dòng),讀者只需關(guān)注模塊級(jí)別的build.gradle。下面在初始的build.gradle文件中補(bǔ)充文字注釋,方便讀者更好地理解每個(gè)參數(shù)的用途。1.4.3App運(yùn)行配置AndroidManifest.xmlAndroidManifest.xml用于指定App內(nèi)部的運(yùn)行配置,是一個(gè)XML描述文件,根節(jié)點(diǎn)為manifest,根節(jié)點(diǎn)的package指定了該App的包名。manifest下面又有若干子節(jié)點(diǎn),分別說明如下:(1)uses-sdk,該節(jié)點(diǎn)有兩個(gè)屬性:android:minSdkVersion和android:targetSdkVersion。這兩個(gè)屬性是早期Eclipse開發(fā)App時(shí)使用的,現(xiàn)在這兩個(gè)字段改成放到build.gradle文件中,故而AndroidStudio不配置uses-sdk也沒有關(guān)系。(2)uses-permission,該節(jié)點(diǎn)用于聲明App運(yùn)行過程中需要的權(quán)限名稱。例如,訪問網(wǎng)絡(luò)需要上網(wǎng)權(quán)限,拍照需要攝像頭權(quán)限,定位需要定位權(quán)限等。(3)application,該節(jié)點(diǎn)用于指定App的自身屬性,默認(rèn)的屬性說明如下:android:allowBackup,用于指定是否允許備份,開發(fā)階段設(shè)置為true,上線時(shí)設(shè)置為false。android:icon,用于指定該App在手機(jī)屏幕上顯示的圖標(biāo)。android:label,用于指定該App在手機(jī)屏幕上顯示的名稱。android:supportsRtl,設(shè)置為true表示支持阿拉伯語(yǔ)/波斯語(yǔ)這種從右往左的文字排列順序。android:theme,用于指定該App的顯示風(fēng)格。application節(jié)點(diǎn)下還有幾個(gè)子節(jié)點(diǎn),比如活動(dòng)activity、服務(wù)service、廣播接收器receiver、內(nèi)容提供器provider等,這些子節(jié)點(diǎn)的詳細(xì)屬性會(huì)在后續(xù)章節(jié)詳細(xì)說明。1.4.4在代碼中操縱控件在一開始創(chuàng)建HelloWorld工程時(shí),AndroidStudio默認(rèn)打開了兩個(gè)文件,分別是布局文件activity_main.xml和代碼文件MainActivity.java。下面先看布局文件activity_main.xml的內(nèi)容:這里可以看到xml文件中只有兩個(gè)節(jié)點(diǎn),分別是RelativeLayout和TextView。再仔細(xì)看看,有沒有發(fā)現(xiàn)熟悉的“HelloWorld”?沒錯(cuò),模擬器App界面顯示的HelloWorld就來自于這里,也就是TextView控件的android:text屬性值??梢园堰@里的HelloWorld改為其他文字,比如“你好、世界”或ILoveAndroid,改完保存文件后再依次選擇菜單Run→Run'app',看看App界面上的文字是不是變成新的了?當(dāng)然,我們的目標(biāo)并不僅限于在布局文件中修改文字,還要能夠在代碼中修改文字的內(nèi)容。再次打開代碼文件MainActivity.java,看看里面有什么內(nèi)容。該java文件中MainActivity類的內(nèi)容如下:這里可以看出,MainActivity.java的代碼內(nèi)容很簡(jiǎn)單,只有一個(gè)MainActivity類,該類下面只有一個(gè)函數(shù)onCreate。注意onCreate內(nèi)部的setContentView方法直接引用了布局文件的名字activity_main,該方法的意思是往App界面填充activity_main.xml的布局內(nèi)容?,F(xiàn)在我們要在這里改動(dòng)改動(dòng),加點(diǎn)“綠葉紅花”讓它好看一些。首先打開activity_main.xml,在TextView節(jié)點(diǎn)下方補(bǔ)充一行android:id="@+id/tv_hello";然后回到MainActivity.java,在setContentView方法下面補(bǔ)充幾行代碼,具體如下:圖1-27修改文字后的HelloWorld界面保存文件后依次選擇菜單Run→Run'app',模擬器上的App界面就變成了如圖1-27所示的樣子?,F(xiàn)在不但文字內(nèi)容改變了,文字顏色和字體大小也發(fā)生了變化。怎么樣,是不是很有成就感呢?好的開始是成功的一半,現(xiàn)在大家初步學(xué)會(huì)了在代碼中操作控件,下一章進(jìn)一步學(xué)習(xí)在App界面上人機(jī)交互。1.5準(zhǔn)備開始俗話說得好,磨刀不誤砍柴工。盡管前面我們已經(jīng)初步學(xué)會(huì)了通過代碼操作控件,不過為了后面介紹Android更順利些,建議讀者先了解本節(jié)的準(zhǔn)備工作。即使已經(jīng)迫不及待要進(jìn)入Android的開發(fā)世界,也萬萬不可跳過本節(jié)直接翻到第2章,心急可吃不了熱豆腐哦。1.5.1使用快捷鍵就像在Eclipse上進(jìn)行java開發(fā)一樣,善用快捷鍵會(huì)讓開發(fā)者提高工作效率,AndroidStudio也是一樣,下面是使用AndroidStudio開發(fā)App常用的快捷鍵。Ctrl+S:保存文件。Ctrl+Z:撤銷上次的編輯。Ctrl+Shift+Z:重做上次的編輯,建議改為Ctrl+Y,與Eclipse、UEStudio等工具保持一致。AndroidStudio默認(rèn)Ctrl+Y為刪除當(dāng)前行,這點(diǎn)不太好,當(dāng)你習(xí)慣按Ctrl+Y重做上次編輯時(shí),系統(tǒng)卻刪除了當(dāng)前行,非常不便。Ctrl+C:復(fù)制。Ctrl+X:剪切。Ctrl+V:粘貼。Ctrl+A:全選。Delete:刪除。Ctrl+F:查詢。Ctrl+R:替換。Ctrl+/:注釋選中代碼(在每行代碼前面加雙斜桿)。Ctrl+Shift+/:注釋選中的代碼段(在選中的代碼段前面加“/*”,后面加“*/”)。Ctrl+Alt+L:格式化選中的代碼段。注意該快捷鍵與QQ默認(rèn)的熱鍵(鎖定QQ)沖突,建議更換快捷鍵,或者刪除QQ的同名熱鍵。Shift+F6:重命名。建議改為F2,與Wnidows和Eclipse的使用習(xí)慣保持一致。Alt+Enter:給光標(biāo)所在位置的類導(dǎo)入相應(yīng)的包。Shift+F10:運(yùn)行當(dāng)前模塊。Ctrl+F5:清理并重新運(yùn)行當(dāng)前模塊。當(dāng)然,每個(gè)人習(xí)慣的快捷鍵不盡相同,對(duì)于AndroidStudio來說也不例外,為了更好地使用快捷鍵,最好手工修改快捷鍵。手工修改快捷鍵的方法:依次選擇菜單File→Settings,在彈出的設(shè)置窗口中選擇Keymap,窗口右側(cè)出現(xiàn)如圖1-28所示的快捷鍵列表。圖1-28快捷鍵設(shè)置界面在設(shè)置界面選中某條快捷鍵,右擊或單擊上方的鉛筆按鈕,在彈出的菜單中選擇AddKeyboardShortcut,然后在鍵盤上按你要設(shè)置的快捷鍵組合,單擊OK按鈕,即可完成對(duì)應(yīng)的快捷鍵設(shè)置。1.5.2安裝SVN工具在企業(yè)里面開發(fā)App都是團(tuán)隊(duì)合作,需要對(duì)代碼進(jìn)行統(tǒng)一管理,而且App每隔一兩周便發(fā)布一個(gè)新版本,這也要求做好工程代碼的版本控制。因此,企業(yè)開發(fā)App都會(huì)運(yùn)用版本控制工具管理工程源碼,最常見的版本控制工具是SVN。AndroidStudio自帶了SVN插件(Subversion),但是還需要開發(fā)者進(jìn)行相關(guān)配置才能正常使用SVN功能。具體配置步驟如下:步驟01在本機(jī)上安裝TortoiseSVN。首先下載TortoiseSVN安裝包,然后在安裝時(shí)選擇commandlineclienttools,這樣安裝后在bin目錄下才能找到命令行工具svn.exe。步驟02在AndroidStudio中配置TortoiseSVN的命令行工具。打開AndroidStudio,依次選擇菜單File→Settings→VersionControl→Subversion→usercommandlineclient,單擊右側(cè)的瀏覽按鈕,選擇本地安裝的svn.exe的完整路徑。步驟03在AndroidStudio中使用SVN檢出項(xiàng)目。打開AndroidStudio,依次選擇菜單VCS→CheckoutfromVersionControl→Subversion,單擊Repositories右方的加號(hào)按鈕,在彈出的小窗口中輸入SVN倉(cāng)庫(kù)地址,單擊OK按鈕,回到原窗口單擊Checkout按鈕,把項(xiàng)目檢出到本地目錄。項(xiàng)目檢出完畢后,在開發(fā)過程中要及時(shí)把改好的代碼提交到SVN,同時(shí)要及時(shí)從SVN更新別人改過的代碼到本地。下面是SVN更新/提交的方法:(1)把代碼提交給SVN服務(wù)器:選中并右擊工程目錄,依次選擇菜單Subversion→CommitFile...,表示向SVN服務(wù)器提交本地改過的文件。(2)從SVN服務(wù)器更新代碼:選中并右擊工程目錄,依次選擇菜單Subversion→UpdateFile...,表示從SVN服務(wù)器更新文件到本地目錄。1.5.3安裝常用插件在AndroidStudio中安裝插件的步驟與Eclipse類似,具體步驟為:依次選擇菜單File→Settings→Plugins→下方按鈕Browserrepositories...,彈出當(dāng)前可用插件列表窗口,如圖1-29所示。圖1-29安裝插件窗口在安裝插件窗口的Category框中選擇Codetools,然后選中左邊列表的指定插件,再單擊右邊窗口內(nèi)部的Install按鈕,安裝后重啟Studio即可正常使用該插件的功能。下面是5個(gè)常用的Studio插件:1.AndroidParcelablecodegenerator該插件可自動(dòng)生成Parcelable接口的代碼。開發(fā)者先寫好一個(gè)類和內(nèi)部變量的定義,然后在代碼中按Alt+Insert,彈出的菜單列表下方就有Parcelable選項(xiàng),如圖1-30所示。選中該選項(xiàng),即在類中插入實(shí)現(xiàn)Parcelable接口的代碼。2.AndroidCodeGenerator該插件可根據(jù)布局文件快速生成對(duì)應(yīng)的Activity、Fragment、Adapter、Menu等代碼。在布局文件上右擊或者在布局文件內(nèi)部右擊,彈出的菜單中多了一個(gè)GenerateAndroidCode選項(xiàng),具體的菜單如圖1-31所示。選中生成項(xiàng)后,便會(huì)彈出代碼窗口,把已生成的代碼復(fù)制出來即可。注意該插件對(duì)漢字的支持不太好,如果XML文件中有漢字,代碼就會(huì)生成失敗。圖1-30Parcelable插件圖1-31GenerateAndroidCode插件菜單3.GsonFormat該插件能夠快速將JSON字符串轉(zhuǎn)換成代碼段,包含變量定義以及set、get函數(shù)。在代碼中按Alt+S,彈出JSON格式化窗口,往窗口中粘貼JSON字符串,單擊OK按鈕,即可在代碼中插入生成好的代碼段。GsonFormat窗口如圖1-32所示。圖1-32GsonFormat插件4.AndroidPostfixCompletion該插件支持在代碼中快速生成Toast、Log等代碼行。開發(fā)者在代碼中輸入字符串,后面跟上.toast并回車,即可生成Toast.makeText代碼行;輸入字符串后,緊接著輸入.log并回車,即可生成Log.d代碼行,如圖1-33所示。圖1-33Postfix插件使用截圖5.AndroidDrawableImporter圖1-34Drawable插件菜單該插件可對(duì)一張圖片自動(dòng)生成不同分辨率的圖片,從而讓圖片對(duì)不同屏幕的適配工作變得更加容易。右擊任意目錄,在彈出的菜單中選擇New,右方彈出的菜單列表末尾會(huì)出現(xiàn)***DrawableImporter之類的菜單項(xiàng),如圖1-34所示。這里通常選中BatchDrawableImport,在彈出的窗口中選擇圖片的文件路徑,并勾選需要自動(dòng)生成的分辨率,然后單擊OK按鈕,即可在drawabe各分辨率的目錄下生成對(duì)應(yīng)的圖片。1.5.4導(dǎo)入已經(jīng)存在的工程初學(xué)者一開始學(xué)習(xí)App開發(fā),免不了想借鑒他人的編碼思路,這就需要將網(wǎng)上的開源工程導(dǎo)入到本地。根據(jù)App工程提供的組織形式,存在兩種方法可以導(dǎo)入到AndroidStudio。如果下載下來的App工程是Project項(xiàng)目形式,則依次選擇菜單File→Open,然后在彈出的對(duì)話框中選擇工程目錄,即可完成該工程的導(dǎo)入操作。如果下載下來的App工程是Module模塊形式,則不能把它當(dāng)作項(xiàng)目導(dǎo)入,否則會(huì)出現(xiàn)“Pluginwithid'com.android.application'notfound.”的錯(cuò)誤。此時(shí)只能模塊的形式導(dǎo)入該App工程,具體的導(dǎo)入步驟如下:(1)依次選擇菜單File→New→NewProject,按提示新建一個(gè)項(xiàng)目(即Project)。(2)項(xiàng)目創(chuàng)建完畢,再依次選擇菜單File→New→ImportModule,然后在彈出的對(duì)話框中選擇模塊目錄。在AndroidStudio2.2/2.3/3.0中,按照上述步驟能夠正常導(dǎo)入App模塊,但是若在AndroidStudio3.1中導(dǎo)入App模塊,會(huì)發(fā)現(xiàn)AS死活無法正常導(dǎo)入。此時(shí)除了先進(jìn)行以上的兩個(gè)導(dǎo)入步驟之外,還要額外進(jìn)行以下的第三個(gè)步驟:(3)打開當(dāng)前項(xiàng)目的settings.gradle,把下面這行:

include':app'

改成下面這樣,也就是手動(dòng)添加新模塊的名稱:

include':app',':新模塊的名稱'

修改完畢,重啟AndroidStudio,再次打開后AS就會(huì)自動(dòng)編譯新模塊了。1.5.5新建一個(gè)Activity頁(yè)面在前面的“1.4.4在代碼中操縱控件”中,我們已經(jīng)嘗試修改XML文件與Java代碼,但這是在現(xiàn)有文件上進(jìn)行修改,如果要增加一個(gè)新的頁(yè)面,就得先創(chuàng)建新頁(yè)面對(duì)應(yīng)的XML布局和Java文件了。具體的頁(yè)面創(chuàng)建步驟如下:在左側(cè)工程結(jié)構(gòu)圖中,選定新頁(yè)面所在的包名如com.example.helloworld,然后右擊該包名,并在彈出的右鍵菜單中依次選擇New→Activity→EmptyActivity,右鍵菜單如圖1-35所示。圖1-35創(chuàng)建Activity頁(yè)面的右鍵菜單此時(shí)會(huì)彈出新頁(yè)面的創(chuàng)建對(duì)話框如圖1-36所示,其中ActivityName一欄填寫頁(yè)面的Java類名,LayoutName一欄填寫頁(yè)面的XML布局名稱,PackageName保持默認(rèn)的包名,確認(rèn)無誤后單擊窗口右下方的Finish按鈕。圖1-36創(chuàng)建Activity頁(yè)面的信息填寫窗口接著AndroidStudio會(huì)自動(dòng)在默認(rèn)包名下面生成頁(yè)面代碼Main2Activity.java,在res\layout下面生成頁(yè)面布局activity_main2.xml,新頁(yè)面創(chuàng)建之后的工程結(jié)構(gòu)如圖1-37所示。圖1-37新頁(yè)面創(chuàng)建之后的工程目錄結(jié)構(gòu)上述操作步驟雖然一次性生成了Java代碼及其對(duì)應(yīng)的XML布局,可是實(shí)際開發(fā)中往往還需要單獨(dú)生成Java代碼,或者單獨(dú)生成XML文件。創(chuàng)建單個(gè)文件的操作那更簡(jiǎn)單了,倘若是創(chuàng)建單個(gè)Java代碼文件,則需右擊工程目錄的包名,在右鍵菜單中依次選擇New→JavaClass,此時(shí)彈出新類的創(chuàng)建對(duì)話框如圖1-38所示。在該窗口的Name一欄填寫Java的類名,在Superclass一欄填寫父類的名稱(如果有的話),最后單擊窗口下方的OK按鈕,即可完成Java代碼的創(chuàng)建操作。倘若是創(chuàng)建單個(gè)XML布局文件,則需右擊layout目錄,在右鍵菜單中依次選擇New→XML→LayoutXMLFile,此時(shí)彈出XML的創(chuàng)建對(duì)話框如圖1-39所示。在該窗口的LayoutFileName一欄填寫布局文件的名稱,在RootTag一欄填寫XML的根節(jié)點(diǎn)名稱,最后單擊窗口右下方的Finish按鈕,即可完成XML布局文件的創(chuàng)建操作。圖1-38創(chuàng)建Java代碼的對(duì)話框圖1-39創(chuàng)建XML布局的對(duì)話框1.6小結(jié)本章主要介紹了App開發(fā)環(huán)境——AndroidStudio環(huán)境的搭建。AndroidStudio作為一個(gè)集成開發(fā)環(huán)境,依賴于3個(gè)開發(fā)工具:JDK、SDK、NDK。從創(chuàng)建最簡(jiǎn)單的HelloWorld項(xiàng)目開始,依次介紹了項(xiàng)目創(chuàng)建、項(xiàng)目編譯、模擬器創(chuàng)建、在模擬器上運(yùn)行App這一連串開發(fā)流程。為了讓讀者有更理性的認(rèn)識(shí),又逐步講解了App的工程目錄結(jié)構(gòu)、編譯配置文件build.gradle的使用說明、App運(yùn)行配置文件AndroidManifest.xml的節(jié)點(diǎn)說明、如何在代碼中簡(jiǎn)單操作控件等。最后對(duì)開發(fā)過程中的準(zhǔn)備工作做了必要的說明,主要包括如何使用快捷鍵、如何使用SVN進(jìn)行版本管理、如何安裝和使用常見插件、如何導(dǎo)入已經(jīng)存在的工程、如何新建一個(gè)Activity頁(yè)面。通過本章的學(xué)習(xí),讀者應(yīng)該獲得了AndroidStudio的基本操作技能,能夠使用自己搭建的AndroidStudio環(huán)境創(chuàng)建簡(jiǎn)單的App并在模擬器上運(yùn)行,并具備進(jìn)一步提高的學(xué)習(xí)基礎(chǔ)。第2章

初級(jí)控件本章介紹Android屏幕顯示與初級(jí)視圖的相關(guān)知識(shí),主要包括屏幕顯示基礎(chǔ)、簡(jiǎn)單布局的用法、簡(jiǎn)單控件的用法、簡(jiǎn)單圖形的用法。并且結(jié)合本章所學(xué)的知識(shí),演示了一個(gè)實(shí)戰(zhàn)項(xiàng)目“簡(jiǎn)單計(jì)算器”的設(shè)計(jì)與實(shí)現(xiàn)。2.1屏幕顯示本節(jié)從最基礎(chǔ)的顯示單元開始介紹,講述了移動(dòng)設(shè)備如何在屏幕上展現(xiàn)豐富多彩的界面。本節(jié)主要內(nèi)容包括像素的幾個(gè)常用單位、顏色的編碼與使用、屏幕分辨率的獲取等。2.1.1像素老子曾說“天下難事必作于易,天下大事必作于細(xì)”,Android開發(fā)也是如此??v使App的界面千變?nèi)f化、絢麗多姿,也都?xì)w因于數(shù)百萬個(gè)像素的組合排列,就像萬物皆由原子構(gòu)成一般。像素看似簡(jiǎn)單,實(shí)際有大學(xué)問,如果對(duì)像素單位不知其所以然,開發(fā)時(shí)只知一根筋的填數(shù)字,結(jié)果在模擬器上運(yùn)行得很好的界面,在真機(jī)上很可能顯示得東倒西歪,這就是沒打好基礎(chǔ)的緣故。如果一開始就把像素的基本概念弄清楚,后面就會(huì)少走很多彎路,開發(fā)起來也會(huì)更加得心應(yīng)手。Android支持的像素單位有:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(與設(shè)備無關(guān)的顯示單位)、dip(就是dp)、sp(用于設(shè)置字體大?。?。其中,常用的有px、dp和sp三種。具體來說,px是手機(jī)屏幕上可顯示的最小單位,與物理設(shè)備的顯示屏有關(guān)。一般來說,同樣尺寸的屏幕(比如5寸的手機(jī))看起來越清晰,像素的密度越高,以px計(jì)量的分辨率也越大。dp與物理設(shè)備無關(guān),只與屏幕的尺寸有關(guān)。一般來說,同樣尺寸的屏幕以dp計(jì)量的分辨率是一樣的,無論這個(gè)手機(jī)是哪個(gè)廠家生產(chǎn)的,dp大小都一樣。sp的原理跟dp差不多,專門用于設(shè)置字體大小。手機(jī)在系統(tǒng)設(shè)置里可以調(diào)整字體的大?。ㄐ?、普通、大、超大)。設(shè)置普通字體時(shí),同數(shù)值dp和sp的文字看起來一樣大;如果設(shè)置為大字體,用dp設(shè)置的文字沒有變化,用sp設(shè)置的文字就變大了。例如,當(dāng)系統(tǒng)設(shè)置普通字體時(shí),18dp與18sp的文字一樣大,如圖2-1所示;當(dāng)系統(tǒng)設(shè)置大字體時(shí),18dp的文字大小不變,18sp的文字卻增大了,如圖2-2所示。圖2-1普通字體的效果圖圖2-2大字體的效果圖所以說,dp與系統(tǒng)設(shè)置的字體大小沒有關(guān)系,而sp會(huì)隨系統(tǒng)設(shè)置的字體大小變大或變小。dp和px之間的聯(lián)系取決于具體設(shè)備上的像素密度,像素密度就是DisplayMetrics里的density參數(shù)。當(dāng)density=1.0時(shí),表示一個(gè)dp值對(duì)應(yīng)一個(gè)px值;當(dāng)density=1.5時(shí),表示兩個(gè)dp值對(duì)應(yīng)3個(gè)px值;當(dāng)density=2.0時(shí),表示一個(gè)dp值對(duì)應(yīng)兩個(gè)px值。具體的轉(zhuǎn)換函數(shù)如下:在XML布局文件中,為了讓不同設(shè)備屏幕擁有統(tǒng)一的顯示效果,除了sp用于設(shè)置文字大小外,其余要用尺寸大小的地方都用dp。在代碼中情況又有所不同,Android用于設(shè)置大小的函數(shù)都以px為單位。無論是LayoutParams里的width和height,還是setMargins和setPadding,參數(shù)單位都是px,要想在代碼中使用dp設(shè)置布局大小或間距,得先把dp值轉(zhuǎn)換成px值。代碼示例如下:

//將10dp的尺寸大小轉(zhuǎn)換為對(duì)應(yīng)的px數(shù)值

intdip_10=Utils.dip2px(this,10L);

//從布局文件中獲取名叫tv_padding的文本視圖

TextViewtv_padding=findViewById(R.id.tv_padding);

//設(shè)置該文本視圖的內(nèi)部文字與控件四周的間隔大小

tv_padding.setPadding(dip_10,dip_10,dip_10,dip_10);

2.1.2顏色在Android中,顏色值由透明度alpha和RGB(紅、綠、藍(lán))三原色定義,有八位十六進(jìn)制數(shù)與六位十六進(jìn)制數(shù)兩種編碼,例如八位編碼FFEEDDCC,F(xiàn)F表示透明度,EE表示紅色的濃度,DD表示綠色的濃度,CC表示藍(lán)色的濃度。透明度為FF表示完全不透明,為00表示完全透明。RGB三色的數(shù)值越大顏色越濃也就越亮,數(shù)值越小顏色越暗。亮到極致就是白色,暗到極致就是黑色,這樣記就不會(huì)搞混了。六位十六進(jìn)制編碼有兩種情況,在XML文件中默認(rèn)不透明(透明度為FF),在代碼中默認(rèn)透明(透明度為00)。下面的代碼分別給兩個(gè)文本控件設(shè)置六位編碼和八位編碼的背景色。

//從布局文件中獲取名叫tv_code_six的文本視圖

TextViewtv_code_six=findViewById(R.id.tv_code_six);

//給文本視圖tv_code_six設(shè)置背景為透明的綠色,透明就是看不到

tv_code_six.setBackgroundColor(0x00ff00);

//從布局文件中獲取名叫tv_code_eight的文本視圖

TextViewtv_code_eight=findViewById(R.id.tv_code_eight);

//給文本視圖tv_code_eight設(shè)置背景為不透明的綠色,即正常的綠色

tv_code_eight.setBackgroundColor(0xff00ff00);

從圖2-3可以看到,代碼使用六位編碼看不到任何背景,使用八位編碼能夠看到正確的綠色背景。圖2-3不同方式設(shè)置顏色編碼的效果圖在Android中使用顏色有下列3種方式:1.使用系統(tǒng)已定義的顏色常量。Android系統(tǒng)有12種已經(jīng)定義好的顏色,具體的類型定義在Color類中,詳細(xì)的取值說明見表2-1。表2-1顏色類型的取值說明2.使用十六進(jìn)制的顏色編碼。在布局文件中設(shè)置顏色需要在色值前面加“#”,如android:textColor="#000000"。在代碼中設(shè)置顏色可以直接填八位的十六進(jìn)制數(shù)值(如setTextColor(0xff00ff00);),也可以通過Color.rgb(intred,intgreen,intblue)和Color.argb(intalpha,intred,intgreen,intblue)這兩種方法指定顏色。在代碼中一般不要用六位編碼,因?yàn)榱痪幋a在代碼中默認(rèn)透明,所以代碼用六位編碼跟不用沒什么區(qū)別。3.使用colors.xml中定義的顏色。res/values目錄下有個(gè)colors.xml文件,是顏色常量的定義文件。如果要在布局文件中使用XML顏色常量,可引用“@color/常量名”;如果要在代碼中使用XML顏色常量,可通過這行代碼獲取:getResources().getColor(R.color.常量名)。2.1.3屏幕分辨率在App編碼中時(shí)常要取手機(jī)的屏幕分辨率(如當(dāng)前屏幕的寬和高),然后動(dòng)態(tài)調(diào)整界面上的布局。在代碼中獲取分辨率就是想辦法獲得DisplayMetrics對(duì)象,然后從該對(duì)象中獲得寬度、高度、像素密度等信息。下面是DisplayMetrics類的常用屬性說明。widthPixels:以px為單位計(jì)量的寬度值。heightPixels:以px為單位計(jì)量的高度值。density:像素密度,即一個(gè)dp單位包含多少個(gè)px單位。下面是獲取當(dāng)前屏幕的寬度、高度、像素密度的代碼示例。從一個(gè)接入設(shè)備上獲得屏幕分辨率信息,如圖2-4所示。該設(shè)備為5寸屏幕,分辨率是720*1280,像素密度是2。圖2-4某手機(jī)上的分辨率信息2.2簡(jiǎn)單布局本節(jié)開始介紹Android的基本視圖和布局,首先說明基本視圖View類的常用屬性和方法,接著描述如何使用線性布局LinearLayout,最后介紹滾動(dòng)視圖ScrollView的用法。2.2.1視圖View的基本屬性View是Android的基本視圖,所有控件和布局都是由View類直接或間接派生而來的。故而View類的基本屬性和方法是各控件和布局通用的,掌握好基本屬性和方法,在哪里都能派上用場(chǎng),能夠舉一反三、事半功倍。下面是視圖在XML布局文件中常用的屬性定義說明。id:指定該視圖的編號(hào)。layout_width:指定該視圖的寬度??梢允蔷唧w的dp數(shù)值;可以是match_parent,表示與上級(jí)視圖一樣寬;也可以是wrap_content,表示與內(nèi)部?jī)?nèi)容一樣寬(內(nèi)部?jī)?nèi)容若超過上級(jí)視圖的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論