AndroidStudio软件用法详细说明

AndroidStudio软件用法说明

个人吐血整理,希望能给大家一些帮助,可能是史上最全的android studio 文档

介绍

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

学习的必要性

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

对比

对比项Eclipse + ADTAndroid Studio
基于IBM公司的EclipseJetBrains公司的 IDEA 社区版
运行速度
程序界面漂亮
编码速度快(更智能的提示)
插件安装繁琐安装简单,自带很多插件
版本控制需额外安装
内存占用
编译ANTgradle
依赖网络
其他内置终端; 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),配置环境变量


界面

  • 整体
    )img

  • 菜单 -File
    )img

  • 菜单 - Build

    img

  • 快捷工具

  • img

  • Project视窗
    img

-Structure视窗

img

  • 代码编辑区域

  • img

  • 代码编辑- 布局文件的多屏预览

  • img

  • Android 监控

  • img

  • Message

  • img


建立HelloWorld项目

  • 重要概念
中文EclipseAS
工作空间WorkSpaceProject
工程(库或应用)ProjectModule

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7t0VLAa6-1601042672516)()]

Gradle相关文件

  • 重要

project 中的 settings.gradle 说明

 // 这个Project中有2个Moduleinclude ':app', ':percent-23.1.0'

project 中的build.gradle说明

 // 构建脚本buildscript {    // 仓库    repositories {        // 中央仓库  https://bintray.com/bintray/jcenter        // 通过jar包的字符串包名,就可以下载到jar包了        // 成熟的公司可能会有自己的仓库服务器,需要在此配置         jcenter()    }    dependencies {        // android gradle构建工具,用于处理module下的build.gradle文件,此版本与Gradle版本有配套关系,目前gradle已经到2.8了,但主要使用的是2.4        classpath 'com.android.tools.build:gradle:1.3.0'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}// 所有项目都依赖于jcenterallprojects {    repositories {        jcenter()    }}// gradle在执行构建任务时的清理配置task clean(type: Delete) {    delete rootProject.buildDir}

module中的build.gradle详细说明

 // 表示这个项目编译完成后,是一个anrdoid应用程序apply plugin: 'com.android.application'// 表示这个项目编译完成后,是一个anrdoid的库//apply plugin: 'com.android.library'android {    // 编译的sdk版本,见sdk\platforms    compileSdkVersion 23    // 构建工具的版本,见sdk\build-tools    buildToolsVersion "23.0.1"    defaultConfig {        // 包名:用于在市场上区分应用的唯一性的标示        applicationId "cn.itcast.as.helloworld"        // 最小sdk版本、目标sdk版,原先是放在清单文件中的        minSdkVersion 15        targetSdkVersion 23        // 应用程序的版本号,和版本码,原先是放在清单文件中的        versionCode 1        versionName "1.0"    }    // 构建类型    buildTypes {        // debug版默认有配置,没有写在这里        // 发行版        release {            // 是否混淆            minifyEnabled false            // 混淆配置文件            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}// 关键:项目的依赖dependencies {    // 在项目中的libs中的所有的.jar结尾的文件,都是依赖    compile fileTree(dir: 'libs', include: ['*.jar'])    // 依赖于junit测试    testCompile 'junit:junit:4.12'    // 还依赖于appcompat-v7,23.1.0版本    compile 'com.android.support:appcompat-v7:23.1.0'}
  • 其他
所属文件类型作用
Project.gradle文件夹配置文件,无需更改、关注
Projectgradle文件夹包含了gradle-wrapper相关文件,无需更改、关注
Projectgradle.properties文件gradle启动的配置,如java虚拟机的内存占用等,一般无需修改
Projectgradlew/gradlew.bat文件初始化gradle相关变量的脚本

文件和文件夹说明

  • Project根目录
文件/文件夹说明
.idea/IDE的Project相关设置
app/默认建立的module目录
build/打包的临时目录
gradle/gradle的相关目录
.gradle/gradle的相关目录
.gitignoregit同步时的忽略的文件
builder.gradleProject的gradle依赖
gradle.propertiesproject的gradle配置
gradlew执行gradle构建的脚本(un*x)
gradlew.bat执行gradle构建的脚本(windows)
local.propertiesSDK目录设置
Project.iml存放module信息
settings.gradleProject下有哪些Module
  • module目录
文件/文件夹说明
build/编译的中间数据、最终apk存放目录
build/source/r/debug/R.javaR文件
build/outputs/apk/APK文件默认位置
libs/导入的jar包存放的位置
src/源码(java、xml、…)
src/androidTest/测试代码存放位置
src/main/java/your/package/namejava代码
src/main/jniLibs/动态连接库所在目录
src/main/assets/资产文件存放目录
src/main/res/资源目录
src/AndroidManifest.xml清单文件
src/main/res/mipmap/一般放置应用图标
app.iml存放module信息(由AS创建)
build.gradlegradle的构建文件
proguard-rules.pro混淆设置

设置

  • 文件编码
    img

  • 程序外观

  • img

  • 编辑区域外观
    img
    img

  • logcat外观
    img


快捷键

视窗快捷键

img

代码补全

img

快捷键方案修改 && 编辑快捷键

img

活动模板

img

后缀补全

img

常用快捷键

动作按键
删除行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,点上面的减号。 然后点确定

img

  1. 删除文件

在原来是module的文件夹上点击鼠标右键,选中delete,在弹出的对话框上点确定。

img


导入依赖img

导入Library

img
img

导入文件jar包

img

导入Module依赖

img

对应关系

img


插件管理

img

安装插件的两种方式

  • 本地安装
  • 网络安装

ButterKnife Zelezny的使用

img

打包APK

img


混淆

作用及意义

  • 减小apk大小,删除无用的类和方法
  • 避免被反编译后重要的程序逻辑暴露

配置

app/build.gradle

 buildTypes {    release {    // false ,关闭混淆    // true , 开启混淆        minifyEnabled false       // proguard-android.txt 是通用的混淆配置文件,放在sdk中  (sdk\tools\proguard\)        // proguard-rules.pro 是项目都有的混淆配置文件 ,在项目的根目录中        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }}

通用混淆文件说明

 # 以#开头的都是注释,下同# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html# 不使用大小写混合的类名# 比如说 a.java 和 A.java。因为在windows下文件名是不区分大小写的,会导致文件的覆盖-dontusemixedcaseclassnames# 混淆第三方jar-dontskipnonpubliclibraryclasses# 打印更多日志-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).# 不做做优化(有时会弄巧成拙)-dontoptimize# 不做预校验-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.# 保留注解上的属性-keepattributes *Annotation*# 保留此类(com.google.vending.licensing.ILicensingService)不被混淆,google需要用到-keep public class com.google.vending.licensing.ILicensingService# 保留此类( com.android.vending.licensing.ILicensingService)不被混淆,google需要用到-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native# 保持 native 方法不被混淆,混淆后不能正确调用底层方法了-keepclasseswithmembernames class * {    native <methods>;}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans# 保留任何直接或间接继承与View的类的set和get开头的方法,不被混淆-keepclassmembers public class * extends android.view.View {   void set*(***);   *** get*();}# We want to keep methods in Activity that could be used in the XML attribute onClick# 保留直接或间接继承于Activity的类的 点击事件方法不被混淆,因为混淆后布局文件写的点击事件方法就会找不到-keepclassmembers class * extends android.app.Activity {   public void *(android.view.View);}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations# 保留枚举类的如下 values 和valueOf方法-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}# 保留实现了Parcelable 接口的类的静态CREATOR常量-keepclassmembers class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator CREATOR;}# 保留R.java中的及内部类的的所有静态字段-keepclassmembers class **.R$* {    public static <fields>;}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version.  We know about them, and they are safe.# 告诉ProGuard不要警告找不到android.support开头的包名.-dontwarn android.support.**

项目特有的常用的混淆语法

  • 特定的类不被混淆
    -keep class package.name.Klass {*;}
  • 某个包下的类不被混淆
    -keep class package.name.** {*;}
  • 继承与某类的类不被混淆
    -keep class * extends java.lang.annotation.Annotation { *; }

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

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

比如

  • butterknife
    http://jakewharton.github.io/butterknife/ 查找 PROGUARD
  • baidu map sdk
    http://lbsyun.baidu.com/index.php?title=androidsdk/qa 查找 混淆
  • xutils
    https://github.com/wyouflf/xUtils 查找 混淆

多APK打包

意义

  • 国内现状: 多个电子市场可提供apk的下载,用于统计市场的作用
  • 同一个应用程序,给不同的客户,需要连接不同的服务器

步骤

1 在清单文件中添加metadata

 <application   ...... >    <!-- market 表示键  ${MARKET}表示值 ,用${}表示会变......-->    <meta-data android:name="market" android:value="${MARKET}"/>    <!-- ......--></application>

2 在程序中获得metadata并使用

 //TODO 从sp中获取是否是第一运行boolean isFirstRun= true;if(isFirstRun){    // 通过PackageManager拿到在清单文件中记录的metadata信息    PackageManager packageManager = getPackageManager();    String packageName = getPackageName();    int flag = PackageManager.GET_META_DATA;    // 表示我们获取当前应用程序的application下的metadata数据    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, flag);    // 传入键名,拿到键值     String market = applicationInfo.metaData.getString("market");    //TODO 获取imei    String imei = "123456";    // TODO 自己实现代码    sentToServer(market, imei);    //TODO 写入sp,下次启动程序就不发送了}

3 添加flavor动态修改metadata

 android{  //...... productFlavors {        _360 {            manifestPlaceholders = [MARKET: "_360"]        }        wandoujia {            manifestPlaceholders = [MARKET: "wandoujia"]        }        anzhi {            manifestPlaceholders = [MARKET: "anzhi"]        }    }}

版本控制

SVN环境

  • 安装TortoiseSVN

    !!! 注意勾选 command line client tools

  • img

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

    settings –> Version Control –> Subversion –>General –> use command line client
    选中TortoiseSVN的安装目录中的bin文件夹中的svn.exe

  • img

上传本地代码

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

img

  • 设置忽略文件
    settings –> Version Control –> Ignored Files
    3种方式:特定文件、指定目录下的文件、特定规则文件

  • img

  • 提交目录

    project 右键 –> Subversion –> share directory
    这一步只提交了目录,文件并没有上传到服务器

img

imgimg

  • 上传文件

    project 右键 –> Subversion –> submit directory

imgimg

下载服务器的代码

在Welcome to Android Studio界面,点击第三个Check out project from Version Control

imgimg

提交代码,编辑冲突

project 右键 –> Subversion –> submit directory

好习惯:先update,再submit

  • 冲突的解决
    3种 接受服务器的,接受自己的,合并

img

英文含义
Accept Theirs用服务器的覆盖本地的
Accept Youts用本地的覆盖服务器的
Merge查看服务器和本地的,最终决定提交的内容

img

!!! 注意,在合并后,还需要submit

断开连接

  • 断开连接
    1. 先删除配置
      在settings –> version control -掉同步文件夹

img

2. 再删除文件



 删除.svn文件夹

img

  • 忘记记录的用户名和密码

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

img

0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

2. 再删除文件



 删除.svn文件夹

img

  • 忘记记录的用户名和密码

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

img

感谢大家!

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页