AndroidStudio相关

AS设置

恢复默认设置

  1. 首先关闭AndroidStudio,注意一定要关闭哦,不然删除不了在使用的保存设置的文件;
  2. 删除C:\Users\本机用户名\ 目录下的**.android**目录;
  3. 删除C:\Users\用户名\AppData\Local\Google下的AndroidStudio4.1文件夹
  4. 删除C:\Users\用户名\AppData\Roaming\Google目录下的AndroidStudio4.1文件夹
  5. 重新打开AndroidStudio简单设置一下即可使用,比在哪找半天原因简单直接;

AS设置多行tab

setting–》Editor–》General–》Editor Tabs

  1. 勾掉“Show tabs in single row”

  2. Tab limit:10

AS 设置代码、控制台背景色

颜色:#FCF5D8 (252,245,216)

  • Windows:

更改代码区域背景色:

File》Settings》Editor》Color Scheme》General》Text》Default text 更改Background

更改输出区域(控制台)背景色:

File》Settings》Editor》Color Scheme》Console Colors》Console 更改Background

更改Project View背景色:

File》Settings》Appearance&Behavior》File Colors》Local colors 添加Project Files


  • Mac:

Preferences>Editor>Color Scheme>General>Text>Default text:更改background

更改输出区域(控制台)背景色:

Preferences>搜索Console Colors:更改background

更改Project View颜色:
Apperance & Behavior>File Colors>Local colors:添加Project Files,颜色选择
打开设置>Editor>Colors&Fonts>General>

AS设置字体大小

AS整体的字体大小

File》Settings》Appearance & Behavior 》Appearance

勾选Override default fonts by(not recommended):Consolas,Size14

AS代码区的字体大小

File》Settings》Editor》Font 更改Font为Consolas,Size为14

设置ctrl+w关闭当前标签页

File》Settings》Keymap:搜索close,找到ctrl+F4快捷键的,移除它并替换成ctrl+w

设置注解不换行

File》Settings》Editor》Code Style》Java》切换到Wrappgin and Braces选项:Field annotations内勾选”Do not wrap after single annotation“

全局变量和局部变量竖向对齐

File》Settings》Editor》Code Style》Java》切换到Wrappgin and Braces选项:Group delcarations内勾选“Align fields in columns”和“Align variables in columns”

AS全局变量和局部变量竖直对齐.png

设置代码标准线

File》Settings》Editor》Code Style,找到General,更改Hard wrap at的值(默认120)

设置格式化换行

File》Settings》Editor》Code Style》Java》切换到Wrappgin and Braces选项:勾选Line breaks和Ensure right margin is not exceeded

Line breaks 选中表示保持断行

Ensure right margin is not execeeded选中表示代码超过标准线就自动换行

更改JDK、SDK 的路径

File–Other Settings–Default Project Structure…

新版AS的JDK更改:
Settings>Build,Execution,Deployment>Build Tools>Gradle中更改

更改工作空间编码

File–Settings–Editor–File Encodings:右侧 Project Encoding 选择 UTF-8 即可

AS 缓存文件移出 C 盘(windows)

C:\Users\YourName\ ** 路径下:

这三个文件夹分别是:
- AndroidStudio 配置与插件缓存文件夹
- gradle 这个文件夹一般不会增长太多,其中存储的是本地的gradle全局配置文件
- m2 这个是本地仓库地址,也就是你使用的所有的远程库都会先缓存到这里然后再添加到你的项目中进行使用;如果你用的插件越多这个文件夹将会持续增大

  1. AS 安装路径bin 下idea.properties
1
2
3
4
5
#idea.config.path=${user.home}/.AndroidStudio/config
idea.config.path=D:/Cache/.AndroidStudio/config

#idea.system.path=${user.home}/.AndroidStudio/system
idea.system.path=D:/Cache/.AndroidStudio/system

版本更新不小心点了 ignore(windows)

不小心点了 ignore 后 check 版本就找不到了

找到C:用户\Administrator\.Android2.1\config\options\updates.xml

把红框中的内容(有ignore…)删除

重启 AS 即可

如果有安装git环境,则会有 C:\Users\Andministrator\.gitconfig 记录全局的账户配置

AS设置默认浏览器

File--Settings--Tools--Web Browsers

Default Browser选择First listed

AS调整项目堆大小

使用的是64位系统,且不少于5GB的RAM,可以手动调整项目的堆大小:

File-->Settings-->Appearance&Behavior-->System Settings-->Memory Settings:调整IDE max heap sizeGradle daemon max heap sizeKotlin daemon max heap size

显示实时内存

File--Settings--Appearance & Behavior--Appearance:勾选Window Options下的Show memory indicator

使得gradle编译速度加快

在根目录下找到gradle.properties加入:

1
2
3
4
5
6
7
8
9
#让你编译时使用守护进程
org.gradle.daemon=true
#org.gradle.jvmargs=-Xmx2048m JVM最大允许分配的堆内存,按需分配
#-XX:MaxPermSize=512m JVM最大允许分配的非堆内存,按需分配
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -D
file.encoding=UTF-8
#使用并行编译
org.gradle.parallel=true
org.gradle.configureondemand=true

AS上双击进行打包

工具/AS打包

右侧gradle不显示tasks的问题

File -> Settings -> Experimental -> 取消勾选 “Do not build Gradle task list during Gradle sync”

AS取消打开项目时是默认打开新窗口

File》Settings》Appearance & Behavior》System Settings,右侧找到 “Project Opening”》勾选“Confirm window to open project in”

工具/AS弹窗确认是否在新窗口打开项目

AS 自动导包

工具/AS自动导包

File》Settings》Editor》General》Auto Import,勾选上“Add unambiguous imports on the fly”

AS 配置阿里云镜像地址

背景:安卓项目(因下载依赖资源包导致的)编译过慢

解决:

全局配置

  1. 用户目录/.gradle(如:C:/用户/Administrator/.gradle)【Mac的Users/名字/.gradle】下新增文件init.gradle

  2. init.gradle内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    allprojects{
    repositories {
    def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
    def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('http://repo1.maven.org/maven2')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://jcenter.bintray.com/') || url.startsWith('http://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
    remove repo
    }
    }
    }
    maven {
    url ALIYUN_REPOSITORY_URL
    url ALIYUN_JCENTER_URL
    }
    }


    buildscript{
    repositories {
    def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
    def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('http://repo1.maven.org/maven2')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://jcenter.bintray.com/') || url.startsWith('http://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
    remove repo
    }
    }
    }
    maven {
    url ALIYUN_REPOSITORY_URL
    url ALIYUN_JCENTER_URL
    }
    }
    }
    }

对指定项目配置

  1. 修改项目根目录下的build.gradle内容,增加如下信息

    1
    2
    3
    4
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }

    完整样例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    buildscript {
    repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
    }
    }

    allprojects {
    repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
    }
    }

    新的

    1
    2
    3
    4
    5
    6
    7

    maven { setUrl("https://maven.aliyun.com/repository/central") }
    maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
    maven { setUrl("https://maven.aliyun.com/repository/google") }
    maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
    maven { setUrl("https://maven.aliyun.com/repository/public") }
    maven { setUrl("https://jitpack.io") }

AS2022.1.1显示每行代码谁修改的

File》Settings》Editor》Inlay Hints:Code vision更改

新版AS的日志过滤

按包名过滤

1
2
//输入package:(输入一个p就会有提示的) ,然后后面跟上你的包名
package:com.mtc.automachinetool

按日志等级过滤

1
2
3
// 输入level: ,后面加上等级,如infodebugwarning
// 当等级为Info时,过滤Info及以上的日志
level:info

按Tag过滤

1
2
// 输入tag: ,后面跟上你要过滤的TAG 字符
tag:cameratest

按关键字过滤

1
2
// 输入message: , 后面跟上你要过滤的关键字
message:TestActivity

组合过滤 (包名+TAG+等级+关键字)

1
2
3
4
// package tag message 可多次使用进行组合
// 这里是对com.mtc.automachinetool包进行Info等级的日志过滤,过滤TAG 为AutoMachineLog
// cameratest,在过滤这些日志里面的带有false和失败关键字的日志
package:com.mtc.automachinetool level:info tag:AutoMachineLog tag:cameratest message:false message:失败

正则表达式过滤

1
2
3
// 只有这些字段支持正则表达式:tag、package、message、line
// 正则表达式匹配通过在字段名称中附加 ~ 来表示。例如 tag~:Android[\S]*。
tag~:Android[\S]*

过滤不想看的日志 (针对快速打印且扰乱我们观察的日志)

1
2
3
// 如果你的日志中有很多无用的且快速打印的日志,影响我们观察日志输出,那我们可以过滤掉他们
// 否定的表示方式是在字段名称前面加上 - 例如
-tag:Android

按时间过滤日志 (只看多长时间内的日志)

1
2
3
// age是过滤最近时间段内的日志,s 表示秒,m 表示分钟,h 表示小时,d 表示天。
// 下面的例子是过滤过去 5 分钟内记录的消息。
age:5m

当然了,你也可以过滤其中的几项。按自己需求过滤

提高AS运行速度

电脑内存一定要大于等于16G

提高AS的运行内存

AS》Help》Edit Custom VM Options

1
2
3
4
5
# custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html
-Xms4096m # 最低分配内存
-Xmx6144m # 最高分配内存
-XX:ReservedCodeCacheSize=2048m # 代码缓存保留空间(不超过2048m)
-Dfile.encoding=UTF-8

如果这个值太大导致的无法启动AS

  1. 那么去C:\Users\Administrator\AppData\Roaming\Google\AndroidStudio2020.3\studio64.exe.vmoptions 修改这里面的值
  2. 然后找到AS安装目录的bin目录,双击studio.bat看看运行内容(可以在这个bat后价格pause看)

studio64.exe.vmoptions

在AS安装目录的bin里面(注意区分32和64位)

建议只修改前四行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升.原因是: 
# 当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器,
# 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器.
# C2比C1编译器编译的相对彻底,服务起来之后,性能更高.
#-server # 服务器模式

-Xms4096m # 最低分配内存
-Xmx6144m # 最高分配内存
-XX:MaxPermSize=6144m
-XX:ReservedCodeCacheSize=2048m # 代码缓存保留空间(不超过2048m)

# UseConcMarkSweepGC
# CMS,全称Concurrent Low Pause Collector
# 主要适合场景是对响应时间的重要性需求大于对吞吐量的要求,
# 能够承受垃圾回收线程和应用线程共享处理器资源,
# 并且应用中存在比较多的长生命周期的对象的应用
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-Djna.nosys=true
-Djna.boot.library.path=
-Didea.vendor.name=Google

-server # 服务器模式

加上这句会出现”If you already have a 64-bit JDK installed, define a JAVA_HOME variable in Computer>System Properties>System Settings>Environment Variables. Failed to create JVM. JVM。。。”

修改idea.properties

找到AS安装路径,打开bin目录,找到idea.properties

打开idea.properties文件,找到idea.max.intellisense.filesize,默认是2500,改为25000(数值仅供参考,具体数值根据自己文件大小来定)

gradle.properties

  • 项目的 gradle.properties 文件(针对当前项目)
  • C:\Users\username.gradle\gradle.properties 这个文件是对所有项目都生效

gradle.properties 内容如下:(如果C盘用户目录下没有这个文件,则新建)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#jvmargs默认配置
#org.gradle.jvmargs=-Xmx4096M
#构建时使用守护进程
org.gradle.daemon=true
#JVM最大允许分配的堆内存,按需分配
org.gradle.jvmargs=-Xmx6144m -XX:MaxPermSize=6144m -XX:+UseParallelGC
#并行构建
org.gradle.parallel=true

#按需配置
org.gradle.configureondemand=true

#启用新一代Dex编译器D8
android.enableD8=true
#启用新一代资源编译器aapt2 (增量资源处理)
android.enableAapt2=true
#启用gradle缓存
org.gradle.caching=true

项目设置

打开dex增量编译

在Module的build.gradle中添加如下代码

1
2
3
4
5
6
dexOptions {
// incremental选项已经过期,现在已经用不到了,默认已经自动启用
// incremental true
//预编译库文件,如果库没有改动,就不需要更新了
preDexLibraries = true
}

修改gradle设置

在Project的gradle.properties中添加:

1
2
3
4
5
6
# 下面注释掉的两项在实际编译的时候,不一定能正常,因此我们暂时不启用
# org.gradle.daemon=true
# org.gradle.configureondemand=true

org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

使用本地gradle

Android StudioGradle每次编译的时候,每次都会联网检查依赖库,如果网速比较慢,会比较耗时。我们可以暂时禁用Gradle的联网检查,如下图:

img

启用 Gradle Caching

Gradle Caching 是 Gradle 3.5 的新特性,顾名思义能通过缓存来加速 build 过程。

在 Android Studio 3.0 中更据此做出了许多优化,因此我们可以这样来启用:

gradle.properties中:

1
2
# Set this in gradle.properties
org.gradle.caching=true

分析出包慢在那儿(分析构建性能)

使用gradle-profiler,官网文档:https://developer.android.google.cn/studio/build/profile-your-build

对于较大的项目或者实现大量自定义构建逻辑的项目,您可能需要更深入地了解构建流程才能找到瓶颈。为此,您可以分析 Gradle 执行构建生命周期的每个阶段和每个构建任务所需的时间。例如,如果构建分析结果显示 Gradle 在配置项目上花费了过多时间,则表明您需要将自定义构建逻辑移出配置阶段。此外,如果 mergeDevDebugResources 任务占用了大量构建时间,则表明您需要将图片转换为 WebP 格式停用 PNG 处理

如果您使用的是 Android Studio 4.0 或更高版本,则最好使用 Build Analyzer 来调查构建性能问题。

此外,您还可以通过以下两种方式在 Android Studio 之外对构建性能进行分析:

  1. 独立的 gradle-profiler 工具,这是一款用于深入分析构建的强大工具。
  2. Gradle --profile 选项,这是一款可从 Gradle 命令行启动的便捷工具。

使用独立的 gradle-profiler 工具

为找到能够提供最快构建速度的项目设置,您需要使用 Gradle 性能剖析器,这是一款用于收集 Gradle 构建的性能分析和基准化分析信息的工具。借助 Gradle 性能剖析器,您可以创建构建场景并多次运行这些场景,以防止结果出现过大差异,并确保结果的可重现性。

基准化分析模式应用于收集干净构建和增量构建的相关信息,而性能分析模式则可用于收集更细化的运行相关信息,包括 CPU 快照。

基准化分析的部分项目设置配置包括:

  • 插件版本
  • Gradle 版本
  • JVM 设置(堆大小、永久代大小、垃圾回收等)
  • Gradle 工作器数量 (org.gradle.workers.max)
  • 按插件选项进一步优化性能

使用入门

  • 相关说明安装 gradle-profiler
  • 运行:gradle-profiler --benchmark --project-dir <root-project> :app:assembleDebug

这将对已完全更新的构建进行基准化分析,因为 --benchmark 会多次运行该任务,且在两次运行之间不会更改项目。然后,它会在 profile-out/ 目录下生成显示构建时间的 HTML 报告。

此外,还有其他场景可能更适合进行基准化分析:

  • 在某个类(您在其中完成大部分工作)中的方法正文中进行代码更改。
  • 在贯穿整个项目的模块中进行 API 更改。虽然这比更改您自己的代码的频率要低,但它的影响更大,因此针对此项的检测会很有帮助。
  • 修改布局,以模拟界面工作迭代。
  • 修改字符串,以模拟转换工作处理。
  • 干净构建,以模拟对构建本身的更改(例如,更新 Android Gradle 插件、更新 Gradle 或修改 buildSrc 下您自己的构建代码)。

要对这些用例进行基准化分析,您可以创建一个能够推动 gradle-profiler 执行的场景,用于对源代码文件应用相应的更改。您可以检测下面的一些常见场景。

注意:Gradle 性能剖析器可能会运行较长的时间,具体取决于多种因素。这些因素包括您的代码库的大小,以及您正在运行的构建的类型,例如,干净构建的用时通常比其他类型的构建更长。

针对不同的内存/CPU 设置执行性能分析

要针对不同的内存和 CPU 设置执行基准化分析,您可以创建使用不同 org.gradle.jvmargs 值的多种场景。例如,您可以创建以下场景:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# <root-project>/scenarios.txt
clean_build_2gb_4workers {
tasks = [":app:assembleDebug"]
gradle-args = ["--max-workers=4"]
jvm-args = ["-Xmx2048m"]
cleanup-tasks = ["clean"]
}
clean_build_parallelGC {
tasks = [":app:assembleDebug"]
jvm-args = ["-XX:+UseParallelGC"]
cleanup-tasks = ["clean"]
}

clean_build_G1GC_4gb {
tasks = [":app:assembleDebug"]
jvm-args = ["-Xmx4096m", "-XX:+UseG1GC"]
cleanup-tasks = ["clean"]
}

运行 gradle-profiler --benchmark --project-dir <root-project> --scenario-file scenarios.txt 即可运行这三种场景,并且,您还可以比较在上述每种设置下 :app:assembleDebug 的用时。

针对不同的 Gradle 插件版本进行性能分析

要了解更改 Gradle 插件版本会对构建时间产生什么影响,可以创建一个场景来对此进行基准化分析。为了能够从场景注入插件版本,您需要完成一些准备工作。更改您的根 build.gradle:

1
2
3
4
5
6
7
8
9
10
11
# <root-project>/build.gradle
buildscript {
def agpVersion = providers.systemProperty("agpVersion").forUseAtConfigurationTime().orNull ?: '4.1.0'

ext.kotlin = providers.systemProperty('kotlinVersion').forUseAtConfigurationTime().orNull ?: '1.4.0'

dependencies {
classpath "com.android.tools.build:gradle:$agpVersion"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin"
}
}

现在,您即可在场景文件中指定 Android Gradle 插件和 Kotlin Gradle 插件的版本,还可以让场景向源代码文件添加新的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# <root-project>/scenarios.txt
non_abi_change_agp4.1.0_kotlin1.4.10 {
tasks = [":app:assembleDebug"]
apply-abi-change-to ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
System-properties {
"agpVersion" = "4.1.0"
"kotlinVersion" = "1.4.10"
}

non_abi_change_agp4.2.0_kotlin1.4.20 {
tasks = [":app:assembleDebug"]
apply-abi-change-to ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
System-properties {
"agpVersion" = "4.2.0-alpha16"
"kotlinVersion" = "1.4.20"
}

对增量构建进行性能分析

大多数构建都是增量构建,因此该场景是您要进行性能分析的最重要的场景之一。Gradle 性能剖析器可为对增量构建进行性能分析提供广泛支持。可以通过更改方法正文、添加新方法、更改布局或字符串资源等方式,自动将更改应用于源代码文件。例如,您可以创建类似如下的增量场景:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# <root-project>/scenarios.txt
non_abi_change {
tasks = [":app:assembleDebug"]
apply-non-abi-change-to = ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
}

abi_change {
tasks = [":app:assembleDebug"]
apply-abi-change-to = ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
}

layout_change {
tasks = [":app:assembleDebug"]
apply-android-layout-change-to = "app/src/main/res/your_layout_file.xml"
}
string_resource_change {
tasks = [":app:assembleDebug"]
apply-android-resource-value-change-to = "app/src/main/res/values/strings.xml"
}

运行 gradle-profiler --benchmark --project-dir <root-project> --scenario-file scenarios.txt 会生成包含基准化分析数据的 HTML 报告。

您可以结合其他设置来分析增量场景(如堆大小、工作器数量或 Gradle 版本):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# <root-project>/scenarios.txt
non_abi_change_4g {
tasks = [":app:assembleDebug"]
apply-non-abi-change-to ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
jvm-args = ["-Xmx4096m"]
}

non_abi_change_4g_8workers {
tasks = [":app:assembleDebug"]
apply-non-abi-change-to ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
jvm-args = ["-Xmx4096m"]
gradle-args = ["--max-workers=8"]
}

non_abi_change_3g_gradle67 {
tasks = [":app:assembleDebug"]
apply-non-abi-change-to ["app/src/main/java/com/example/your_app/your_code_file.java,
"app/src/main/java/com/example/your_app/your_code_file.kt"]
jvm-args = ["-Xmx3072m"]
version = ["6.7"]
}

对干净构建进行性能分析

要对干净构建进行基准化分析,您可以创建一个推动 gradle-profiler 执行的场景:

1
2
3
4
5
# <root-project>/scenarios.txt
clean_build {
tasks = [":app:assembleDebug"]
cleanup-tasks = ["clean"]
}

如需运行此场景,请使用以下命令:

1
gradle-profiler --benchmark --project-dir <root-project> --scenario-file scenarios.txt

使用 Gradle --profile 选项

如需从 Gradle 命令行生成和查看构建性能分析报告,请按以下步骤操作:

  1. 在项目根目录下开启一个命令行终端。

  2. 输入以下命令,以执行干净构建。在剖析 build 性能时,您应该在剖析的每个 build 之间执行干净构建,这是因为如果某个任务的输入内容(例如源代码)未发生更改,Gradle 就会跳过它。因此输入内容未发生更改的第二个 build 始终会以更快的速度运行,因为任务不会重复运行。在 build 之间运行

    1
    clean

    任务可以确保您能够剖析完整的构建流程。

    1
    2
    // On Mac or Linux, run the Gradle wrapper using "./gradlew".
    gradlew clean
  3. 使用以下标记为您的某个产品变种(例如“dev”变种)执行调试 build:

    1
    gradlew --profile --offline --rerun-tasks assembleFlavorDebug
    • --profile:启用性能剖析。
    • --offline:禁止 Gradle 提取在线依赖项。这样可以确保因 Gradle 尝试更新依赖项而导致的任何延迟都不会干扰您的性能剖析数据。您应该已将项目构建一次,以确保 Gradle 已经下载和缓存您的依赖项。
    • --rerun-tasks:强制 Gradle 重新运行所有任务并忽略任何任务优化。
  4. img

    图 1. 指示性能剖析报告所在位置的 Project 视图。

    构建完成后,使用 Project 窗口转到 project-root/build/reports/profile/ 目录(如图 1 所示)。

  5. 右键点击 profile-timestamp.html 文件,然后依次选择 Open in Browser > Default。报告应与图 2 中显示的类似。您可以查看报告中的每个标签页以了解您的构建,例如,Task Execution 标签页显示了 Gradle 执行各个构建任务所花费的时间。

    img

    图 2. 在浏览器中查看报告。

  6. 可选:在对您的项目或构建配置进行任何更改之前,请重复执行第 3 步中的命令,但请省略 --rerun-tasks 标记。由于 Gradle 会尝试通过不重复执行输入未发生变化的任务来节省时间(这些任务在报告的 Task Execution 标签页中标记为 UP-TO-DATE,如图 3 中所示),您可以确定哪些任务在不必要的时间执行了工作。例如,如果 :app:processDevUniversalDebugManifest 未标记为 UP-TO-DATE,可能表明您的构建配置会随每次构建动态更新清单文件。不过,有些任务(例如 :app:checkDevDebugManifest)需要在每次构建期间都运行。

    img

    图 3. 查看任务执行结果。

现在,您已经有了一份构建性能剖析报告,可以通过查看报告中每个标签页下的信息发现优化机会。有些 build 设置需要进行实验,因为其优势在不同项目和工作站之间可能有所不同。例如,包含大型代码库的项目可能会受益于通过代码缩减移除不使用的代码并缩减应用大小。但是,项目越小,完全停用代码缩减功能带来的益处就越多。此外,增加 Gradle 堆的大小(使用 org.gradle.jvmargs)可能会对内存较小的机器的性能产生负面影响。

对构建配置进行更改后,请重复上述步骤并生成新的构建性能剖析报告,以观察更改的结果。例如,图 4 显示了同一示例应用在采纳本页介绍的一些基本优化后的报告。

img

图 4. 查看优化构建速度后的新报告。

AS使用技巧

AS断点技巧

logcat

  • 旁边的Logcat Header可以设置只显示某些内容
  • 上方的搜索框内可以过滤内容,如果过滤条件经常用可以把它设置到右上角的Edit Filter COnfiguration
  • 选中一些 log 内容,右键选择Fold lines Like This可以折叠

断点

  • 条件断点
    右键点击红点,Condition框中可以输入 Kotlin 表达式

  • 断点某个线程
    右键红点,Suspend选择ThreadCondition框中输入线程

  • 直接输出,不需要在代码中添加输出语句
    右键点击红点,勾选掉Suspend,在展开的框中:Evaluate and log可输入要打印出来的条件;"Breakpoint hit" message可以只输出断点的日志;

  • 多个断点分组
    右键点击红点,选择more,选择几个断点后右键创建新的组。可以快速选择某个组来断点(适用于不同 bug 归类)

  • 丢帧功能(Android10 以上才有)
    适用于断点跑过头了的情况,点击Drop Frame,再点击Resume Program来重新进入上面的断点

  • 断点拖动位置
    断点可以拖动到别的行

  • watch 变量设置标记
    选中几个watch内容,右键Mark Object...可以添加标记。在 watch 窗口中点”+”输入我们的标记(会自动补全)。可以跟随单一实例来看它在做什么。
    与上面的条件断点结合使用特别好用:条件输入“item == 刚刚的标记”
    适用于有多个项的情况,我们只想看自己的项,就可以把这些项标记起来

  • Evaluate Expression...
    输入框的右侧点击可展开,在Code fragment内可以输入任何表达式。
    适用于实时监控变量的变化

  • bug栈的日志关联到具体代码
    拷贝bug 栈的日志,选择Analyze Stack Trace...,贴入复制的,点击 ok 就可以关联到具体代码了。

  • 临时断点:按住alt+断点(只会停一次便自动消失)

  • 断点的时候点击随机位置,都可以跳到那个方法

  • Attach Debugger to Android Process
    可以快速关联断点

  • Apply Changes And Restart Activity
    适用于更改了 onCreate 中的代码或布局文件。还需要配合上面的丢帧功能

  • Apply Code Changes
    适用于只更改了逻辑片段

  • 无断点暂停:在很长的循环时不知道运行到哪了,在调试窗口左侧点“Pause Program”可以暂停到当前执行的地方

idea断点技巧 http://qinghua.github.io/intellij-idea-debug/

快速找到设备上显示页面是哪个activity

法1:借助AS的Layout Inspector功能

(此法在AS3.6.1之前可用,发现在AS4.0.1没用了)

Tools--Layout Inspector,在打开的窗口总选中当前运行项目的进程,再看其罗列出的**Activity

法2:使用ActView插件(推荐)

安装插件:File--Settings--Plugins:搜索ActView进行安装

使用:插上真机;打开app;AS上Help右侧多了个ActView,选择Which Activity

法3:使用ADB命令

查看当前Activity

1
adb shell "dumpsys window w | grep name="

查看当前栈顶的Activity

1
adb shell "dumpsys activity | grep mFocusedActivity"

查看当前栈顶的ActivityFragment

1
adb shell "dumpsys activity your.package.name"

在Ubuntu或mac上可以配置环境变量来简化命令

1
2
//配置环境变量
alias dui='adb shell "dumpsys window w | grep name="'
1
2
//使用简短的命令
dui

AS4.0以上加guideline无法弄成百分比的问题

手动添加 app:layout_constraintGuide_percent="0.11"属性,并且去掉 app:layout_constraintGuide_begin="20dp"属性。如此就能按百分比拖动了(垂直和水平辅助线都适用)

完整:

1
2
3
4
5
6
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.11" />

IDEA注释

// TODO

表示尚未完成的待办事项。

// XXX

表示被注释的代码虽然实现了功能,但是实现方案有待商榷,希望将来能改进。

// FIXME

表示被注释的代码需要被修正。

自定义标签

window–>preferences–>java–>compiler–>Task tags

AS插件

AS插件推荐

链接1

插件名称 说明
GsonFormat json字符串自动生成对应Java对象idea插件--gsonformat.gif
工具/AndroidStudio的GsonFromat设置
Alibaba Java Coding Guidelines 代码规范
Android ButterKnife Zelezny 配合ButterKnife自动生成注解
FindViewByMe 生成findViewById
RemoveButterKnife 从注解改回findviewbyid
ActView 快速定位到当前Activity/Fragment(AS4以上用不了了)
Codota–》TabNine 代码智能提示
CodeGlance 在右侧预览代码
Translation 翻译插件idea插件--Translation.gif
SQLDelight SQLDelight是一个著名的Kotlin多平台数据库库。它通过SQL生成Kotlin API,并负责根据架构本身创建数据库。
JSON To Kotlin Class 将JSON字符串转换为Kotlin数据类。还支持:
一系列JSON注解库-GsonJacksonFastjsonMoshiLoganSquare等。
使用默认值初始化属性,并使它们可以为空。
将属性名称重命名为驼峰样式,并将类生成为内部或单个类。
如果JSON字符串有效,则从本地文件/ Http URL加载JSON。
Rainbow Brackets 成对括号加不同颜色![idea插件–Rainbow Brackets.jpg](./AndroidStudio相关/idea插件–Rainbow Brackets.jpg)
Material Theme UI 眼睛舒适的主题
Name That Color 对颜色命名。img
Gradle Killer 后悔开始Gradle构建或只是希望立即将其关闭。您可以运行ps命令或在任务管理器中四处寻找Java.exe,但这会很麻烦。现在只要点一下按钮即可img
Kotlin Fill Class 快速创建具有默认属性的Kotlin类。此IntelliJ插件就是用于此目的。它为空的构造函数函数提供了意图操作,使您可以快速初始化参数。img
NR Null Oject介绍 空对象判断
项目中还需要引入dependencies { compile 'com.google.guava:guava:27.0-jre' // or, for Android: api 'com.google.guava:guava:27.0-android' }
File Expander 可直接打开jar包看代码。(平时能看jar代码 是因为它们在classpath内了)
Atom Material ICons 一款ICON插件【并不好看,但装上它有使得idea在mac上拖动滚动条或鼠标中键滚屏不卡顿的buff~】
GitToolBox 可以提示还有多少文件没提交,远程还有多少文件未更新下来,会提示每一行代码上次提交的时间
p3c 阿里巴巴出品的java代码规范插件
ARouter Helper 使用ARouter写的代码,会在左侧有跳转按钮
TemplateBuilder 生成模板
SimpleUMLCE 查看类图 下载 说明
findBugs-IDEA 查找bug的插件,Android Studio也提供了代码审查的功能(Analyze-Inspect Code…)idea插件--findbugs.gif
Grep Console 自定义设置日志不同颜色
RestfulToolkit 定位某URL对应Controller代码,快速测试Controller接口
MyBatis Log Plugin 拿出Mybatis的某个具体SQL查询语句
Free Mybatis plugin 方便地在Mybatis地mapper Java接口方法和mapper XML文件之间切换
Statistic 项目全局代码统计
Lombok 这个插件的好处在于可以让我们的代码更简洁,减少一些重复的工作,最常用的就是@Data注解,比如在实体类上使用@Data注解,实体类的各个属性就不需要书写get和set方法。idea插件--lombok.gif
LeakCanary(不是插件,需要在gradle中引入) 在开发阶段方便的检测出内存泄露
TemplateBuilder 选中模板文件,按下【ALT + T】(或在Tools下选择Generate Template),配置模板信息
1.Android Parcelable code generator
2.android-parcelable-intellij-plugin
JavaBean序列化,快速实现Parcelable接口。
Lifecycle Sorter 可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K
ADB WIFI 使用wifi无线调试你的app,无需root权限
Android Drawable Importer 批量导入Drawable ,多源导入Drawable
AndroidProguardPlugin 一键生成项目混淆代码插件(可能有些第三方项目的混淆还未添加完全)
Markdown Navigator markdown插件
Android Studio Prettify 将代码中的字符串写在string.xml文件中
.ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写idea插件--ignore.gif
WakaTime 记录你在IDE上的工作时间
AndroidLocalizationer string 资源自动翻译为其他语言的
TranslationPlugin 又一翻译插件,可中英互译。
Matchmaker 这是一款专为微信小程序开发的插件,目前可在 IntelliJ IDEA 中使用。它可以帮你完成重复机械无趣麻烦的绑定方法的过程,自动的将需要新建的方法注入到 js 文件中去。
Android Drawable Importer 批量导入图片
用法:右键 res--New--Batch Drawable Import
GenerateAllSetter 一键调用一个对象的所有set方法并且赋予默认值 在对象字段多的时候非常方便idea插件--generateAllSetter.gif
Material Theme UI 超多的主题插件,各种颜色、模式
idea zookeezper 可以图形化的查看zk 节点信息
Generate Module From Template 制作模板
Key Promoter X 当你在IDE内,把鼠标放按钮上时,Key Promoter X会提示你应该使用的快捷键
Clear Cache Plugin 通过使用Clear Cache插件,我们可以检索具有给定前缀的所有软件包,并删除不再需要的软件包。img
SQLScout 对Android Studio和IntelliJ IDEA极好的SQLite支持,可让您实时管理数据库。这使得在调试应用程序时轻松实时执行SQL查询以更新表。还支持Room 持久性库-从现有数据库模式自动生成Room 实体DAOMigrationDatabase类。数据库图表,带有语法突出显示工具的SQL编辑器,可导出schema 为Excel等不同格式。img
Material Design Icon Generator 这个插件可以帮助你在Android应用程序中添加Material设计图标。导入assets,指定颜色大小密度非常简单。img
Nyan Progress Bar 有趣的彩色进度条。可让您在Gradle构建和重建过程中始终陪伴着您。

AS SVN插件配置(windows)

Settings 里找到 Version Control–Subversion

AS配置svn.png

svn.exe 是安装 TortoiseSVN 时有个选项安装command line client tools

问题

控制台中文输出乱码

idea中设置

  1. idea安装目录,进入bin目录

idea.exe.vmoptionsidea64.exe.vmoptions最后面添加

1
-Dfile.encoding=UTF-8
  1. 更改Settings-Editor-File Encoding编码:更改成UTF-8编码

idea控制台乱码更改FileEncoding.png

OutOfMemoryError

Settings--Build,Execution,Deployment--Compiler右侧找到Build process heap size:改成2048

Settings--Build,Execution,Deployment--Compiler--ActionScript&Flex Compiler右侧找到Compiler heap size:改成2048

PermGen space内存溢出

Settings--Build,Execution,Deployment--Build Tools--Maven--Runner修改右侧VM Options内容:-XX:MaxPermSize=4096M

Build窗口的中文字符乱码

问题描述:AS升级到3.6.2后Build窗口出现中文乱码

解决:打开studio64.exe.vmoptions(在AS安装目录的bin下),在最后添加一行-Dfile.encoding=UTF-8

代码报红色错误,但是可以运行的问题

尝试以下步骤:

  1. 使用自带的清除缓存功能

AS–》File–》Invalidate Caches/Restart…

  1. 删除工程目录下.gradle.idea

关闭 AS,进入工程根目录,删除.gradle.idea,重新打开 AS

  1. 如果 1、2 不起效,那么删除.AndoridStudio下除了config外的所有目录

路径C:\Users\Administrator\.AndroidStudio3.1\system,删除system

  1. 删除 user 目录下.gradle

路径C:\Users\Administrator\.gradle,删除.gradle

  1. 如果上面的步骤还是不行。删除项目重新checkout一份(项目名称改成不一样的)

javaCompileOptions.annotationProcessorOptions

问题:AS Plugin3.0.0 Gradle-javaCompileOptions.annotationProcessorOptions

在 app 的 build.gradle 中:在 android–》defaultConfig 内添加以下

1
javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true

AS3.5以上格式化xml时布局错乱问题

设置 > code style > XML 右上角 Set from然后选择Predefined Style…>Android即可

AS格式化后xml布局错乱解决.png

AS运行报找不到apk,导致无法正常安装到真机(实际找的是前一天的apk)

在AS右侧,点击Gradle,选择整个项目,点击“Refresh All Gradle Projects”或者“Refresh Gradle Dependencies”

如果断点了但跳不到对应的源码,那就是被混淆了

minifyEnabled:false关闭混淆

bash: gradlew: command not found(Mac)

打开环境变量文件

1
open -e ~/.bash_profile

配置 gradle

1
2
export GRADLE_HOME=/usr/local/Cellar/gradle/6.1.1
export PATH=$PATH:$GRADLE_HOME/bin
1
export PATH=${PATH}:/Applications/Android Studio.app/Contents/gradle/gradle-2.14.1/bin

ctrl + shift + f 不能用

其他快捷键没有问题,这种情况很大可能是输入法占用了ctrl + shift + f

Warning:JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore …

用新版AS(4.0+)新建签名文件时会有警告
用新版AS创建签名文件时报警告.png

解决:使用提示内的命令

打开模拟器报错:Error while waiting…… process for AVD Pixel_XL_API_29 was killed

重装HAXM

方法一:Settings–>System Settings–>Android SDK–>切换到SDK Tools页签:找到Intel x86 Emulator Accelerator(HAXM installer)卸载,重启AS再重装它

方法二:打开控制面板的程序,找到HAXM卸载(记得要关闭掉已经打开的模拟器)

Your project path contains non-ASCII characters

  1. 先确保项目的路径名称没有中文

  2. gradle.properties中添加com.android.build.gradle.overridePathCheck=true

SSL peer shut down incorrectly

解决方案:
网上的一个解决方法是把配置文件gradle-wrapper.properties中的distributionUrl参数从https://services.gradle.org/distributions/换成http://
但这个解决方法已经不行了,因为gradle把服务部署在cloudflare上,如果使用http访问会报错:

1
2
3
4
Error 1020 Ray ID: 55f3e39ffd4aa2ca • 2020-02-03 10:58:20 UTC
Access denied
What happened?
This website is using a security service to protect itself from online attacks.

解决方法1:到官网手动下载压缩包:Gradle Distributions,解压到目录%USERPROFILE%/.gradle/wrapper/dists
解压后重启 Android Studio即可。

解决方法2:把URL直接改成本地已经下载的 gradle

plugin error: Plugin “xxx”is incompatible (supported only in IntelliJ IDEA).

打开C:\Users\Administrator\AppData\Roaming\Google\AndroidStudio4.1\plugins找到对应名字”xxx”的plugin,删除掉即可

Gradle sync failed: Connection refused

解决:用户/.gradle/gradle.properties,删除该文件【C:\Users\Administrator\.gradle\gradle.properties

写模板的时候,项目报Kotlin not configured

![kotlin not configured](./AndroidStudio相关/kotlin not configured.png)

解决:卸载掉错误的plugin;关闭AS,删除.gradle.ideabuild,重新打开AS

Could not resolve commons-io:commons-io:2.6

1
2
3
4
Could not resolve commons-io:commons-io:2.6.
> Could not get resource 'https://dl.google.com/dl/android/maven2/commons-io/commons-io/2.6/commons-io-2.6.pom'.
> Could not GET 'https://dl.google.com/dl/android/maven2/commons-io/commons-io/2.6/commons-io-2.6.pom'.
> Can't connect to SOCKS proxy:Connection refused: connect

C:/用户/Administrator/.gradle添加了init.gradle,配置了阿里云镜像导致的

解决:暂时去掉了全局配置的init.gradle。若有需要可在特定项目中添加对指定项目配置

Plugin [id: ‘org.jetbrains.kotlin.jvm’, version: ‘1.4.0’] was not found in any of the following sources

升级AS4.2的坑

Execution failed for task ‘:app:compileDebugJavaWithJavac’

1
2
Execution failed for task ':app:compileDebugJavaWithJavac'. 
> javax/xml/bind/JAXBException

Android Studio 右侧的Gradle不显示Task的问题

  1. File》Experimental,不勾选“Do not build Gradle task list during Gradle sync”
  2. 然后点击“Sync Project”即可

打开Profiler,app闪退

解决:

方法一:打开ASDevice File Explorer,找到 /data/data/pacakge_name/codecache 文件夹,删除它

方法二:打开ASDevice File Explorer,找到 /data/local/tmp/perfd 文件夹,删除它,即可。如果怕删除有问题,可以先把它备份下,再删除。

Profiler的Capture heap dump用不了

按上面的方法一二删除了相应文件夹后,不闪退了,但是Capture heap dump依然是灰色不可用状态。

解决:开发者模式中(调试位置不要选应用)【不确定是不是它】

Capture heap dump自动断开

运行flutter doctor –android-licenses时报错

1
2
java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recog
nizes class file versions up to 55.0

解决:

未解决,但Settings》Android SDK》SDK Tools:“Android SDK Command-line Tools”改成“8.0”,可以解决flutter doctor的一个错误

Unable to find bundled Java version.

flutter doctor后出现:

1
2
Android Studio (version 2023.2)
Unable to find bundled Java version.

解决: https://blog.csdn.net/woshidanoob/article/details/128779709
AS安装目录下的jbr下的所有文件复制一份到jre中

HTTP Host availability check is taking a long time…[!] HTTP Host Availability

1
2
HTTP Host availability check is taking a long time...[!] HTTP Host Availability
X HTTP host "https://maven.google.com/" is not reachable. Reason: An error occurred while checking the HTTP host: 信号灯超时时间已到

解决: https://blog.csdn.net/qq_41602125/article/details/127407360

  1. 找到Flutter SDK下“packages》flutter_tools》lib》src》http_host_validator.dart”:修改
    https://maven.google.com/ 修改为https://dl.google.com/dl/android/maven2/
  2. 关闭所有打开了flutterSDK的程序,找到flutter\bin目录下的flutter_tools.snapshot文件,永久删除。
  3. 配置国内的pub插件镜像地址,参数如下
    1
    2
    3
    4
    5
    PUB_HOSTED_URL
    https://pub.flutter-io.cn

    FLUTTER_STORAGE_BASE_URL
    https://storage.flutter-io.cn

    上面的我只做了第3步,1的检查了已经改过了,还是不行。所以删除了flutter sdk 重装flutter sdk 可以了。