Android开发环境搭建+AS常用功能指导

AndroidStudio 已经迭代了好几个版本,功能已稳定,各种配置的方法在搜索引擎里基本都能找到,这里做一些简单汇总整理。

一、AndroidStudio 开发环境搭建

1.1 简单介绍AndroidStudio

它是 Google 推出的功能强大的 android 开发工具,支持 Java 和 Koltin 语言。
官网的介绍:
Android Studio provides the fastest tools for building apps on every type of Android device.

1.2 下载AndroidStudio

去官网 https://developer.android.google.cn/studio 下载最新版本。

1.3 官网说明的新功能简单介绍

  • 快速预览:xml编写的UI页面在预览页快速看到效果、ConstraintLayout 的可视化操作等;
  • apk 分析:检查清单文件、资源和DEX文件等;
  • 模拟器:快速的模拟器、小改动可以直接 Apply Changes ;
  • 代码编辑:智能代码编辑器,主要体现在代码提示;
  • 灵活构建系统:由Gradle提供支持,androidstudio的构建系统允许您定制构建,以便从单个项目为不同设备生成多个构建变体,主要体现在多渠道打包;
  • 实时分析器:实时分析app内存情况;

1.4 开始安装

安装的时候一直下一步即可,在选择 安装路径 和 SDK 的时候,默认放在C盘 ,建议放在D盘、E盘等,防止占用太多 C 盘空间,导致电脑卡顿。
详细步骤可参考 https://www.jianshu.com/p/492111393275
在这里插入图片描述

二、AS工程初步了解

2.1 新建一个 HelloWorld 工程

首次安装点击 Create a new Android studio Project ,非首次则执行 File – New – New Project
在这里插入图片描述
写上工程名、包名、选择存储路径等,
在这里插入图片描述

然后默认得到一个 Hello World 工程。

2.2 目录介绍

  • project 视图,就是磁盘目录的形式,我们重点关注 app/src/main 目录,也就是源代码目录;在这里插入图片描述
  • app 视图,就只显示源码和编译配置相关的东西 在这里插入图片描述

2.3 常用工具栏说明 在这里插入图片描述

  • Project 栏:查看项目整体架构、编译相关配置等;
  • Structure 栏:查看类结构,方便找到类里的方法;
  • Build Variants 栏:选择编译的版本, debug 或者 release 版本;
  • Terminal 栏:命令行形式显示工程目录,在这里执行 adb shell 就可以使用 adb 调试了;
  • Logcat 栏:adb 连接之后查看应用 log ,连接平台后,也可以看到系统 log ;
  • Gradle 栏:使用 gradle 执行 build 、clean 等操作 ;
  • Event Log 栏:项目编译的 log 在这里显示;
  • Layout Inspector 栏:adb 连接后可查看应用 layout 布局信息;

三、AS配置修改

3.1 修改主题和面板字体

File – Settings – Appearance
在这里插入图片描述

3.2 修改代码字体

File – Settings – Editor – Font在这里插入图片描述

3.3 修改文件格式为 UTF-8 ,方便显示中文在这里插入图片描述

ps:代码文件格式一般保存为 UTF-8 无BOM 格式
在这里插入图片描述

3.4 修改SDK路径

SDK 默认放在C盘,可修改放到其他盘。
在这里插入图片描述

  • SDK Platforms 栏,可下载多个版本备用,方便跳转、查看Android 源码,示例:
    在这里插入图片描述
  • SDK Tools 栏,主要下载SDK相关工具, CMake 、NDK 相关的,按需下载即可;
    在这里插入图片描述

3.5 分配内存

找到AS安装路径,如 D:\Android\Android Studio\bin ,
32位机器打开 studio.exe.vmoptions 文件 ,
64位机器打开 studio64.exe.vmoptions 文件,修改 Xms 、Xmx的值。
其中 -Xms 是JVM启动的起始堆内存,堆内存是分配给对象的内存。
其中 -Xmx 是 Java 虚拟机启动时的参数,用于限制最大堆内存。所以这里也需要更改。
这个修改可根据自己电脑的实际情况进行分配。
在这里插入图片描述
直接在AS里修改也可以,
在这里插入图片描述
重启后生效。

3.6 自定义ToolBar

如下图几个选中项,是我自己添加的。
在这里插入图片描述

新增按钮、分隔线、为新按钮添加图标等
在这里插入图片描述

3.7 添加插件

直接在AS里下载,File – Settings – Plugins ,搜索后安装即可。
在这里插入图片描述

从本地导入,然后根据路径选择对应的插件包
在这里插入图片描述
导入后重启生效。

3.8 修改模拟器(AVD)路径

模拟器默认放在 C:\Users\Administrator.android\avd ,占用C盘;把它改到其他盘。
方法;添加环境变量,
变量名:ANDROID_SDK_HOME
变量值:D:\Android\AVD ;这个是我的目录,也可以创建其他目录,把目录名对应上即可;

计算机右键–属性–高级系统设置–环境变量–系统变量,新增ANDROID_SDK_HOME系统变量,对应的值添加为自己创建的目录。
参考 AndroidStudio修改虚拟机AVD路径_bctool的博客-CSDN博客_android studio更改虚拟机路径
https://blog.csdn.net/bctool/article/details/52714359

在这里插入图片描述

四、常用快捷键

在AS里, Help – Keymap Reference 可以得到官方快捷键汇总表 IntelliJIDEA_ReferenceCard.pdf
这里列出部分:

  1. 某个文件里搜索: Ctrl + F
  2. 全局搜索:双击 shift
  3. 对文件重命名:Shift + F6
  4. 复制整行:Ctrl + D
  5. 删除整行:Ctrl +Y
  6. 跳到指定行: Ctrl +G
  7. 重写父类方法:Ctrl + O
  8. 重写接口:Ctrl + I
  9. 显示常用操作:Alt + Insert
  10. 安装应用 Run app : Shift + F10
  11. 代码格式化 : Ctrl + Alt + L
  12. 删除没有使用的 import :Ctrl + Alt +O
  13. 单行注释:Ctrl + / ,取消注释也是此快捷键
  14. 区块注释:Ctrl + Shift + / ,取消注释也是此快捷键

五、常用插件

AS 插件很多,可访问 https://plugins.jetbrains.com/ 了解。
插件介绍的相关博客也有很多,自己搜一下就知道了。
可参考
最好用的Android Studio插件
热门Android Studio 插件,这里是Top 20!

这里列出部分:

  1. Material Theme UI Lite / Material Theme UI :酷炫的 UI
    在这里插入图片描述
  2. ECTranslation :翻译插件,选中单词后右键翻译;
  3. GsonFormat :Gson插件,根据 json 数据快速得到 JavaBean ;
  4. Rainbow Brackets :为括号添加多个颜色,方便查看多重嵌套 ,xml 文件里也有效;
    在这里插入图片描述
  5. ADB WIFI :添加后可在局域网内通过 wifi 实现 adb 调试;
  6. ADB Idea :添加后方便进行 adb 调试,具体的操作在 Tools --> ADB Idea 里
    在这里插入图片描述
  7. Android Parcelable code generator :快速实现 Parcelable 序列化代码
    在这里插入图片描述
  8. Nyan Progress Bar :彩色进度条(没什么用,换个UI而已)
    在这里插入图片描述
  9. Android ButterKnife Zelezny :配合 ButterKnife 实现注解,在Activity,Fragment,Adapter中选中布局资源id自动生成 ButterKnife 注解,不用再写 findViewById 了。
  10. Lifecycle Sorter :对 Activity 、Fragment 的生命周期方法排序,快捷键 Ctrl + Alt + k
  11. PermissionsDispatcher plugin:自动生成 6.0 运行时权限代码
    在这里插入图片描述

六、AS实践

6.1 导入工程

  • 导入一个 AS 工程
    File – Open ,选择对应路径下的工程即可。
  • 导入 Eclipse 工程
    我们系统应用的源码,目录结构是 Eclipse 形式的;
    File – New – Import Project ,
    根据路径选择需要导入的工程源码,
    在这里插入图片描述
    选择存放的路径,
    在这里插入图片描述
    Next 之后就完成了。

6.2 修改 gradle 配置

从其他地方导入的 AS 工程到自己电脑上,gradle 可能同步很久也不行,参照如下修改;

6.2.1 修改项目的 build.gradle 文件

从服务器里导出的系统源码,同步之后可能缺失 google() ,参考注释 1、2 处添加即可。

buildscript {
    repositories {
        google()//1
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'
    }
}

allprojects {
    repositories {
        google()//2
        jcenter()
    }
}

6.2.2 修改项目的 build.gradle 文件,修改 gradle 版本

在这里插入图片描述

6.2.3 修改 gradle-wrapper.properties 文件

在这里插入图片描述
把这两个地方改成自己的版本就可以了。如果不知道自己使用的是哪个版本,新建一个工程或者查看本地已同步的工程来确定上述两处应该设置的版本。

6.3 修改 SdkVersion 相关

从服务器导入的应用源码,同步之后可能提示 AndroidManifest 里 sdkVersion 相关的警告,注释掉这一段

<!--<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="23" />-->

某些系统 API 会提示,此 API 最低支持是 14 ,当前工程最低支持是 1 ,修改 app 的 build.gradle 文件,设置 minSdkVersion 、targetSdkVersion 。把 compileSdkVersion 和 targetSdkVersion 保持一样的版本,消除 AS 的版本警告。
在这里插入图片描述

6.4 导入依赖包

把要导入的依赖包(jar包、aar包)放到在目录 app/libs下(有则直接放,没有就创建;一般创建为 lib 或者 libs),修改 app 的 build.gradle 文件

implementation fileTree(dir: "libs", include: ["*.jar"])
implementation(name: 'name', ext: 'aar')

在这里插入图片描述
另一种方法是,把 xxx.jar 包放到 libs 目录下,对 xxx.jar 右键,add as library。

6.5 同步工程

如上述 6.2 、6.3 的操作,改动到了编译相关的配置,都需要同步工程。
一般修改了 build.gradle 文件,AS 都提示要同步,Sync Now 即可。在这里插入图片描述
也可以手动在 Toolbar 同步。
在这里插入图片描述

6.6 新建文件

  • 新建文件
    在文件夹右键 New – File 即可,文件类型可以自己定义。在这里插入图片描述

  • 新建 Class 文件
    同新建文件,在对应的文件夹右键 New – File – Java Class 即可。

  • 新建 xml 文件
    同新建文件,在 layout 文件夹右键 New – File – Xml 即可。

6.7 查看历史修改记录

在文件里右键 – Local History – Show History 可以查看历史修改记录,方便对比、还原代码。
在这里插入图片描述

6.8 关联git

AS 关联 git 仓库或者项目后,可以很方便的进行 git 操作。
在 VCS – Get from Version Control 里操作,设置远程仓库URL 和本地仓库地址,Clone 即可。
这样就关联成功了,关联成功后在操作栏会出现 pull 、push 的图标,也可以进行分支等操作。
参考 AndroidStudio怎样和Git关联_u010680097的专栏-CSDN博客_as关联git
https://blog.csdn.net/u010680097/article/details/52768376

在这里插入图片描述

6.9 使用国内镜像

有些库可能因为网络因素无法引用,可使用国内镜像,修改后同步工程即可。

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        //google()
        //jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        //google()
        //jcenter()
    }
}

在这里插入图片描述
参考 AndroidStudio maven jcenter google 等仓库配置国内镜像_ezconn的博客-CSDN博客_maven google
https://blog.csdn.net/ezconn/article/details/90794869?d=1594366163619

6.10 清除缓存

修改了工程的配置之后可能出现奇怪的错误,多次同步也无效的话清空缓存即可。
具体操作为 Build – Clean Project / Rebuild Project 。
在这里插入图片描述

如果这个操作也无效,尝试 File – Invalidate Caches / Restart
在这里插入图片描述

6.11 修改生成的 apk 的名字

默认 build 生成的 apk 名为 app-debug.apk ,修改为自己的。修改 app 的 build.gradle 文件,
android{ } 里添加如下

android.applicationVariants.all {
        variant ->
            variant.outputs.all {
                //这里修改apk文件名
                outputFileName = "ApkName_${variant.name}_v${variant.versionName}.apk"
            }
    }

variant.name 对应编译的版本, release 或者 debug ;
variant.versionName 对应 defaultConfig{ } 里的 versionName 。
在这里插入图片描述

6.12 生成apk

Build Variant 栏可选择编译的版本,debug 或者 release 版本。
在这里插入图片描述

6.13 打系统签名

打了系统签名的应用,拥有系统级权限,可以使用系统级API,权限很高。

方法总结:

6.13.1 AndroidManifest 配置文件声明

声明应用是系统级app ,android:sharedUserId="android.uid.system"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxx.yyyyy"
    android:sharedUserId="android.uid.system">
    //省略其他
</manifest>

6.13.2 生成 jks 或者 keystore

keytool-importkeypair-master 工具、系统签名文件 platform.x509.pemplatform.pk8 生成 jks 或者 keystore ,
在 Linux 环境下按照实际配置执行如下命令得到 test.jks 文件;

./keytool-importkeypair -k test.jks -p yourpassword -pk8 platform.pk8 -cert platform.x509.pem -alias testalias

其中,test.jks 为生成的 jks,test是 jks 的名称,随便取;
jks 的密码为 yourpassword,自己设置,一般为字母和数字;
testalias 为 jks 的别名,随便取;

6.13.3 AS 导入 jks 或者 keystore 并添加配置

导入 jks ,Build – Generate Signed Bundle / APK – apk – Choose existing , 导入外部的jks 。 如果是
要创建新的,选择 Create new 。
在这里插入图片描述

将生成的 test.jks 放到 app/ 目录下,build.gradle 配置 signingConfigs { }

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.xxx.test"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }

    signingConfigs {
        release {
            storeFile file('test.jks')
            storePassword '123456'
            keyAlias 'testalias'
            keyPassword '123456'
        }
        // 如果 debug 版本也打签名,则添加这一部分
        debug {
            storeFile file('test.jks')
            storePassword '123456'
            keyAlias 'testalias'
            keyPassword '123456'
        }
        // 如果 debug 版本也打签名,则添加这一部分
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

这样编译出来的应用就是系统应用了。
具体可参考 使用AndroidStudio生成打有系统签名的apk

6.14 多渠道打包

用一套代码编译生成不同发布渠道的应用,应用的功能大体一致,可配置不一样的签名、包名、应用图标等。
通过配置 productFlavors 来实现,app 的 build.gradle 示例

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.test.multibale"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    signingConfigs {
        // 只是用来做演示,没有特地生成签名文件
        MultiBale {
            storeFile file("src/main/multibale.jks")
            storePassword "mul123"
            keyAlias "keymul"
            keyPassword "mul123"
            // 开启 V2 签名
            v2SigningEnabled true
        }
        ktc {
            storeFile file("src/ktc/multibalektc.jks")
            storePassword "ktc123"
            keyAlias "keyktc"
            keyPassword "ktc123"
            v2SigningEnabled true
        }
        ktc_v2 {
            storeFile file("src/ktc/multibalektc.jks")
            storePassword "ktc123"
            keyAlias "keyktc"
            keyPassword "ktc123"
            v2SigningEnabled true
        }
    }

    flavorDimensions "app"

    sourceSets {
        MultiBale {
            java.srcDir('src/main/java')
            res.srcDir('src/main/res')
            // assets.srcDir('src/main/assets')
            // manifest.srcFile('src/main/AndroidManifest.xml')
        }

        ktc {
            java.srcDir('src/ktc/java')
            res.srcDir('src/ktc/res')
            // assets.srcDir('src/ktc/assets')
            // manifest.srcFile('src/ktc/AndroidManifest.xml')
        }

        ktc_v2 {
            java.srcDir('src/ktc_v2/java')
            res.srcDir('src/ktc_v2/res')
            // assets.srcDir('src/ktc_v2/assets')
            // manifest.srcFile('src/ktc_v2/AndroidManifest.xml')
        }
    }

    productFlavors {
        MultiBale {
            applicationId "com.test.multibale"
            dimension "app"
            versionCode 1
            versionName "1.0"
            signingConfig signingConfigs.MultiBale
        }
        ktc {
            applicationId "com.test.multibale.ktc"
            dimension "app"
            versionCode 1
            versionName "1.2"
            signingConfig signingConfigs.ktc
        }
        ktc_v2 {
            applicationId "com.test.multibale.ktc_v2"
            dimension "app"
            versionCode 2
            versionName "2.0"
            signingConfig signingConfigs.ktc_v2
        }
    }

    applicationVariants.all {
        variant ->
            variant.outputs.all {
                outputFileName = "${variant.productFlavors[0].name}_v${variant.productFlavors[0].versionName}_${releaseTime()}.apk"
            }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

具体可参考 教你如何一套源码编译多个APP,不同的签名,包名,界面,字段