zoukankan      html  css  js  c++  java
  • AndroidStudio界面简介

    AndroidStudio

    介绍

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

    学习的必要性

    • 趋势
    原因说明
    发展趋势 google公司把官方IDE工具定为AS,并停止了EclipseADT的维护
    工作 越来越多的公司在使用AS作为开发工具,特别是大公司、好公司
    学习 Github上越来越多的android开源项目是AS开发的
    • 更好用

    对比

    对比项Eclipse + ADTAndroid 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-studioinstudio.exe
      • 64 位运行android-studioinstudio64.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项目

    • 重要概念
    中文EclipseAS
    工作空间 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版本,见sdkplatforms
    7. compileSdkVersion 23
    8. // 构建工具的版本,见sdkuild-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 oolsproguard)
    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


  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/zx-blog/p/11835112.html
Copyright © 2011-2022 走看看