AndroidStudio界面簡介


AndroidStudio

介紹

Google官方的Android集成開發環境(IDE = Integrated Development Environment),Eclipse + Adt插件的代替者。

學習的必要性

  • 趨勢
原因 說明
發展趨勢 google公司把官方IDE工具定為AS,並停止了EclipseADT的維護
工作 越來越多的公司在使用AS作為開發工具,特別是大公司、好公司
學習 Github上越來越多的android開源項目是AS開發的
  • 更好用

對比

對比項 Eclipse + ADT Android Studio
基於 IBM公司的Eclipse JetBrains公司的 IDEA 社區版
運行速度
程序界面 漂亮
編碼速度 快(更智能的提示)
插件 安裝繁瑣 安裝簡單,自帶很多插件
版本控制 需額外安裝
內存占用
編譯 ANT gradle
依賴網絡
其他   內置終端; UI編輯支持多屏預覽;多APK打包

 


 

安裝

http://developer.android.com/sdk/index.html

  1. 安裝需求

    • JDK 1.7
    • 2G空閑內存
    • 500M磁盤空間
  2. 安裝方式

    • 解壓IDE工具(推薦)
    • 安裝IDE工具
    • 安裝IDE+SDK+AVD
  3. 運行

    • 32 位運行android-studio\bin\studio.exe
    • 64 位運行android-studio\bin\studio64.exe
  4. 配置

    • AS的android插件會嘗試下載SDK更新,因國內網絡問題,會導致下載失敗無法啟動程序

      初次運行無法進入程序(網絡問題,無法下載SDK更新) 
      在 AS安裝目錄/bin/idea.properties最后添加 
      disable.android.first.run=true

  5. 常見問題 
    tools.jar缺失,或其他的jar缺失 
    原因:jdk沒有安裝好。 
    解決:卸載當前jdk、刪除java環境變量;重啟;安裝正確的jdk(已提供合適的JDK安裝文件,安裝時不要安裝JRE),配置環境變量

 


 

界面

  • 整體 

     

     

  • 菜單 -File 

     

     

  • 菜單 - Build

  •  

     

     

  • 快捷工具 

  •  

     


  • Project視窗 

  •  

     


-Structure視窗 

 

 


  • 代碼編輯區域 

  •  

     

     

     

     


  • 代碼編輯- 布局文件的多屏預覽 

  •  

     


  • Android 監控 

  •  

     


  • Message 

  •  

     


 


 

建立HelloWorld項目

  • 重要概念
中文 Eclipse AS
工作空間 WorkSpace Project
工程(庫或應用) Project Module

As中強調應該把相關的工程放在同一個工作空間中


Gradle相關

概念

Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。當前其支持的語言限於Java、Groovy和Scala,計划未來將支持更多的語言。

https://zh.wikipedia.org/zh/Gradle

編譯過程

http://developer.android.com/tools/building/index.html

 

 

Gradle相關文件

  • 重要

project 中的 settings.gradle 說明

  1. // 這個Project中有2個Module
  2. include ':app', ':percent-23.1.0'

project 中的build.gradle說明

  1. // 構建腳本
  2. buildscript {
  3. // 倉庫
  4. repositories {
  5. // 中央倉庫 https://bintray.com/bintray/jcenter
  6. // 通過jar包的字符串包名,就可以下載到jar包了
  7. // 成熟的公司可能會有自己的倉庫服務器,需要在此配置
  8. jcenter()
  9. }
  10. dependencies {
  11. // android gradle構建工具,用於處理module下的build.gradle文件,此版本與Gradle版本有配套關系,目前gradle已經到2.8了,但主要使用的是2.4
  12. classpath 'com.android.tools.build:gradle:1.3.0'
  13. // NOTE: Do not place your application dependencies here; they belong
  14. // in the individual module build.gradle files
  15. }
  16. }
  17. // 所有項目都依賴於jcenter
  18. allprojects {
  19. repositories {
  20. jcenter()
  21. }
  22. }
  23. // gradle在執行構建任務時的清理配置
  24. task clean(type: Delete) {
  25. delete rootProject.buildDir
  26. }

module中的build.gradle詳細說明

  1. // 表示這個項目編譯完成后,是一個anrdoid應用程序
  2. apply plugin: 'com.android.application'
  3. // 表示這個項目編譯完成后,是一個anrdoid的庫
  4. //apply plugin: 'com.android.library'
  5. android {
  6. // 編譯的sdk版本,見sdk\platforms
  7. compileSdkVersion 23
  8. // 構建工具的版本,見sdk\build-tools
  9. buildToolsVersion "23.0.1"
  10. defaultConfig {
  11. // 包名:用於在市場上區分應用的唯一性的標示
  12. applicationId "cn.itcast.as.helloworld"
  13. // 最小sdk版本、目標sdk版,原先是放在清單文件中的
  14. minSdkVersion 15
  15. targetSdkVersion 23
  16. // 應用程序的版本號,和版本碼,原先是放在清單文件中的
  17. versionCode 1
  18. versionName "1.0"
  19. }
  20. // 構建類型
  21. buildTypes {
  22. // debug版默認有配置,沒有寫在這里
  23. // 發行版
  24. release {
  25. // 是否混淆
  26. minifyEnabled false
  27. // 混淆配置文件
  28. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  29. }
  30. }
  31. }
  32. // 關鍵:項目的依賴
  33. dependencies {
  34. // 在項目中的libs中的所有的.jar結尾的文件,都是依賴
  35. compile fileTree(dir: 'libs', include: ['*.jar'])
  36. // 依賴於junit測試
  37. testCompile 'junit:junit:4.12'
  38. // 還依賴於appcompat-v7,23.1.0版本
  39. compile 'com.android.support:appcompat-v7:23.1.0'
  40. }
  • 其他
所屬 文件 類型 作用
Project .gradle 文件夾 配置文件,無需更改、關注
Project gradle 文件夾 包含了gradle-wrapper相關文件,無需更改、關注
Project gradle.properties 文件 gradle啟動的配置,如java虛擬機的內存占用等,一般無需修改
Project gradlew/gradlew.bat 文件 初始化gradle相關變量的腳本

 


 

文件和文件夾說明

  • Project根目錄
文件/文件夾 說明
.idea/ IDE的Project相關設置
app/ 默認建立的module目錄
build/ 打包的臨時目錄
gradle/ gradle的相關目錄
.gradle/ gradle的相關目錄
.gitignore git同步時的忽略的文件
builder.gradle Project的gradle依賴
gradle.properties project的gradle配置
gradlew 執行gradle構建的腳本(un*x)
gradlew.bat 執行gradle構建的腳本(windows)
local.properties SDK目錄設置
Project.iml 存放module信息
settings.gradle Project下有哪些Module
  • module目錄
文件/文件夾 說明
build/ 編譯的中間數據、最終apk存放目錄
build/source/r/debug/R.java R文件
build/outputs/apk/ APK文件默認位置
libs/ 導入的jar包存放的位置
src/ 源碼(java、xml、..)
src/androidTest/ 測試代碼存放位置
src/main/java/your/package/name java代碼
src/main/jniLibs/ 動態連接庫所在目錄
src/main/assets/ 資產文件存放目錄
src/main/res/ 資源目錄
src/AndroidManifest.xml 清單文件
src/main/res/mipmap/ 一般放置應用圖標
app.iml 存放module信息(由AS創建)
build.gradle gradle的構建文件
proguard-rules.pro 混淆設置

 


 

設置

  • 文件編碼 
  •  

     


  • 程序外觀 
  •  

     


  • 編輯區域外觀 
  •  

     

     

     

     


     
  • logcat外觀

     

     

     

 


 

快捷鍵

視窗快捷鍵

 

 

代碼補全

 

 

快捷鍵方案修改 && 編輯快捷鍵

 

 

活動模板

 

 

后綴補全

 

 

常用快捷鍵

動作 按鍵
刪除行 Ctrl + Y
復制一行 Ctrl + D
上下移動代碼 Alt + Shift + Up/Down
格式化代碼 Ctrl + Alt + L
優化導導包 Alt + Ctrl + O
大小寫轉換 Ctrl + Shift + U
打開文件 兩次shift
注釋代碼(//) Ctrl + /
注釋代碼(/**/) Ctrl + Shift + /
生成代碼 Alt + Insert
快速定位錯誤 F2
查找 Ctrl + F
查看繼承關系 Ctrl + H
查找+替換 Ctrl + R
快捷覆寫方法 Ctrl + O

 


 

調試

進入調試的兩種方式

  • 以調試模式運行

  • 運行后調試

    需要注意 運行的程序的代碼應該與所看到的是同一份,不然點擊提示會錯位

如何打斷點

  • 代碼左側單擊

  • 代碼左側單擊時按着shift鍵

斷點類型

斷點類型 什么時候會停下來 注意
行斷點 執行到此行
成員變量斷點 被賦值 或 訪問 art虛擬機提供,需安卓5以上設備才有此功能
方法斷點 進入方法或退出方法 會影響代碼執行的效率,慎用
異常斷點 出現了未捕獲異常 及 捕獲的異常 默認不開啟

 


 

導入module

導入Eclipse項目

File –> New –> Import Module

導入AndroidStudio項目

File –> New –> Import Module

導入AAR

File –> New –>New Module –> Import .jar/.aar package

刪除導入的Module

當文件夾上顯示了手機或柱狀圖 圖標,說明此文件夾是受保護的,無法被刪除

  1. 取消保護

打開Project Struecture。 選中要刪除的module,點上面的減號。 然后點確定

 

 

  1. 刪除文件

在原來是module的文件夾上點擊鼠標右鍵,選中delete,在彈出的對話框上點確定。

 

 

 


 

導入依賴

 

 

導入Library

 

 

 

 

 

 

 

 

導入文件jar包

 

 

 

 

 

導入Module依賴

 

 

 

 

 

對應關系

 

 

 

 

 

 


 

插件管理

 

 

安裝插件的兩種方式

  • 本地安裝
  • 網絡安裝

ButterKnife Zelezny的使用

打包APK

 

 

 


 

混淆

作用及意義

  • 減小apk大小,刪除無用的類和方法
  • 避免被反編譯后重要的程序邏輯暴露

配置

app/build.gradle

  1. buildTypes {
  2. release {
  3. // false ,關閉混淆
  4. // true , 開啟混淆
  5. minifyEnabled false
  6. // proguard-android.txt 是通用的混淆配置文件,放在sdk中 (sdk\tools\proguard\)
  7. // proguard-rules.pro 是項目都有的混淆配置文件 ,在項目的根目錄中
  8. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  9. }
  10. }

通用混淆文件說明

  1. # 以#開頭的都是注釋,下同
  2. # This is a configuration file for ProGuard.
  3. # http://proguard.sourceforge.net/index.html#manual/usage.html
  4. # 不使用大小寫混合的類名
  5. # 比如說 a.java A.java。因為在windows下文件名是不區分大小寫的,會導致文件的覆蓋
  6. -dontusemixedcaseclassnames
  7. # 混淆第三方jar
  8. -dontskipnonpubliclibraryclasses
  9. # 打印更多日志
  10. -verbose
  11. # Optimization is turned off by default. Dex does not like code run
  12. # through the ProGuard optimize and preverify steps (and performs some
  13. # of these optimizations on its own).
  14. # 不做做優化(有時會弄巧成拙)
  15. -dontoptimize
  16. # 不做預校驗
  17. -dontpreverify
  18. # Note that if you want to enable optimization, you cannot just
  19. # include optimization flags in your own project configuration file;
  20. # instead you will need to point to the
  21. # "proguard-android-optimize.txt" file instead of this one from your
  22. # project.properties file.
  23. # 保留注解上的屬性
  24. -keepattributes *Annotation*
  25. # 保留此類(com.google.vending.licensing.ILicensingService)不被混淆,google需要用到
  26. -keep public class com.google.vending.licensing.ILicensingService
  27. # 保留此類( com.android.vending.licensing.ILicensingService)不被混淆,google需要用到
  28. -keep public class com.android.vending.licensing.ILicensingService
  29. # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
  30. # 保持 native 方法不被混淆,混淆后不能正確調用底層方法了
  31. -keepclasseswithmembernames class * {
  32. native <methods>;
  33. }
  34. # keep setters in Views so that animations can still work.
  35. # see http://proguard.sourceforge.net/manual/examples.html#beans
  36. # 保留任何直接或間接繼承與View的類的setget開頭的方法,不被混淆
  37. -keepclassmembers public class * extends android.view.View {
  38. void set*(***);
  39. *** get*();
  40. }
  41. # We want to keep methods in Activity that could be used in the XML attribute onClick
  42. # 保留直接或間接繼承於Activity的類的 點擊事件方法不被混淆,因為混淆后布局文件寫的點擊事件方法就會找不到
  43. -keepclassmembers class * extends android.app.Activity {
  44. public void *(android.view.View);
  45. }
  46. # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
  47. # 保留枚舉類的如下 values valueOf方法
  48. -keepclassmembers enum * {
  49. public static **[] values();
  50. public static ** valueOf(java.lang.String);
  51. }
  52. # 保留實現了Parcelable 接口的類的靜態CREATOR常量
  53. -keepclassmembers class * implements android.os.Parcelable {
  54. public static final android.os.Parcelable$Creator CREATOR;
  55. }
  56. # 保留R.java中的及內部類的的所有靜態字段
  57. -keepclassmembers class **.R$* {
  58. public static <fields>;
  59. }
  60. # The support library contains references to newer platform versions.
  61. # Don't warn about those in case this app is linking against an older
  62. # platform version. We know about them, and they are safe.
  63. # 告訴ProGuard不要警告找不到android.support開頭的包名.
  64. -dontwarn android.support.**

項目特有的常用的混淆語法

  • 特定的類不被混淆 
    -keep class package.name.Klass {*;}
  • 某個包下的類不被混淆 
    -keep class package.name.** {*;}
  • 繼承與某類的類不被混淆 
    -keep class * extends java.lang.annotation.Annotation { *; }

使用第三方jar包在混淆后出錯

一般,都可以在網站上找到相應的混淆配置

比如

 


 

多APK打包

意義

  • 國內現狀: 多個電子市場可提供apk的下載,用於統計市場的作用
  • 同一個應用程序,給不同的客戶,需要連接不同的服務器

步驟

1 在清單文件中添加metadata

  1. <application
  2. ...... >
  3. <!-- market 表示鍵 ${MARKET}表示值 ,用${}表示會變......-->
  4. <meta-data android:name="market" android:value="${MARKET}"/>
  5. <!-- ......-->
  6. </application>

2 在程序中獲得metadata並使用

  1. //TODO 從sp中獲取是否是第一運行
  2. boolean isFirstRun= true;
  3. if(isFirstRun){
  4. // 通過PackageManager拿到在清單文件中記錄的metadata信息
  5. PackageManager packageManager = getPackageManager();
  6. String packageName = getPackageName();
  7. int flag = PackageManager.GET_META_DATA;
  8. // 表示我們獲取當前應用程序的application下的metadata數據
  9. ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, flag);
  10. // 傳入鍵名,拿到鍵值
  11. String market = applicationInfo.metaData.getString("market");
  12. //TODO 獲取imei
  13. String imei = "123456";
  14. // TODO 自己實現代碼
  15. sentToServer(market, imei);
  16. //TODO 寫入sp,下次啟動程序就不發送了
  17. }

3 添加flavor動態修改metadata

  1. android{
  2. //......
  3. productFlavors {
  4. _360 {
  5. manifestPlaceholders = [MARKET: "_360"]
  6. }
  7. wandoujia {
  8. manifestPlaceholders = [MARKET: "wandoujia"]
  9. }
  10. anzhi {
  11. manifestPlaceholders = [MARKET: "anzhi"]
  12. }
  13. }
  14. }

 


 

版本控制

SVN環境

  • 安裝TortoiseSVN

    !!! 注意勾選 command line client tools

  • 在as中,設置svn的命令行工具

    settings –> Version Control –> Subversion –>General –> use command line client 
    選中TortoiseSVN的安裝目錄中的bin文件夾中的svn.exe

上傳本地代碼

  • 設置同步 
    settings –> Version Control 
    把project后面加上版本控制的類型

  • 設置忽略文件 
    settings –> Version Control –> Ignored Files 
    3種方式:特定文件、指定目錄下的文件、特定規則文件

  • 提交目錄

    project 右鍵 –> Subversion –> share directory 
    這一步只提交了目錄,文件並沒有上傳到服務器

  • 上傳文件

    project 右鍵 –> Subversion –> submit directory

下載服務器的代碼

在Welcome to Android Studio界面,點擊第三個Check out project from Version Control

提交代碼,編輯沖突

project 右鍵 –> Subversion –> submit directory

好習慣:先update,再submit

  • 沖突的解決 
    3種 接受服務器的,接受自己的,合並

英文 含義
Accept Theirs 用服務器的覆蓋本地的
Accept Youts 用本地的覆蓋服務器的
Merge 查看服務器和本地的,最終決定提交的內容

!!! 注意,在合並后,還需要submit

斷開連接

  • 斷開連接
    1. 先刪除配置 
      在settings –> version control -掉同步文件夾

2. 再刪除文件
 刪除.svn文件夾

  • 忘記記錄的用戶名和密碼

settings –> version control –> subversion –>clear auth cache

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM