前言
临时安排接手一个 Android 应用项目开发,庆幸的是 Android APP 已经开发完成,我只需要在我的电脑上运行起来打包看一下效果即可,但是对于一个从未接触过安卓开发的我来说真的是费尽脑汁,并且这个前期准备真的是太麻烦了,而且会出现各种意想不到的问题。
所以,我利用闲暇时间整理一下本次 Android 开发的体验经历,同时为其他没有接触过 Android 开发的小伙伴提供一下开发思路。
如果懂行的小伙伴看出了什么门道,欢迎留言讨论,为其他小伙伴提供更多解决问题的思路。
一、开发环境快速搭建
1. 下载 JDK
官网下载地址:JDK - 传送门
选择下载相应版本的 JDK,同意协议后下载即可。
如果在这一步下载有问题的话,可以去看一下具体的下载方式,网上对于 JDK 下载的教程有很多,我在这里就不过多赘述了。
2. 下载 Android SDK
由于某些限制,很难打开并且下载官网上的 SDK,所以这里为大家推荐国内的 Android 工具的下载网站:AndroidDevTools - 传送门
可以在顶部菜单栏选择 “Android SDK 工具” => “SDK Tools”,会自动跳转至该下载模块;也可以直接下滑至 “SDK Tools” 模块。
选择适合自己的版本进行下载即可。
将下载后的安装包解压到相应的目录下。
二、Android Studio
1. 下载
Android Studio 的下载也可以在刚才推荐的国内的 Android 工具的下载网站上下载:AndroidDevTools - 传送门
第一个就是,选择版本直接下载即可。
2. 安装
这里推荐大家看一下 Android Studio 开发环境快速搭建 这篇文章里的 4.安装Android Studio,还是比较详细的,在这里我就不过多赘述了。
三、创建并启动一个安卓模拟器
至此,你应该将你的 JDK、SDK 和 Android Studio 等都搭建完成。
我们在安装了一个 Android SDK 后,就可以创建一个对应版本的模拟器啦。
- 启动 Android Studio ,点击下面按钮,进入创建模拟器管理页面
- 点击 + Create Virtual Device 创建模拟器
- 在弹出的页面中,Categroy 类型选择 “Phone”,并选择一款手机型号,单机 Next 按钮(Play Store 列没有三角形的,就无需下载其他组件)
- 下载对应的镜像,点击 Next 继续
- 在新页面中设置 Android 模拟器
AVD Name:模拟器名字
Nexus 5X:手机型号,屏幕尺寸为5.2英寸,分辨率为1080*1920(单位:像素),420dpi
R:对应的Android版本11.0 x86
Startup orientation:模拟器横屏或者竖屏显示
Graphics:选择模拟器中的渲染图形
Device Frame:是否显示手机外形,可以不勾选。
设置完成,单击 Finish 按钮,即完成 Android 模拟器的创建。 - 在 Android 模拟器管理列表中,选择创建的 Android 模拟器,在 Actions 一列中单机三角形启动按钮,启动模拟器
- 启动成功,如图:
四、运行项目
上面我们已经把环境和模拟器都创建好了,下面我们开始创建并运行一个项目。
- 可以在一开始创建一个 Android 应用,或者在内部选择 “File” => “New” => “New Project”,创建一个项目。
- 或
- 选择一个 Activity,默认选择空的 Activity 即可。
- 配置 Activity,用默认的就好,不需要修改
- 第一次创建项目可能会这样,Finish 即可
- 首次进入项目主界面,等待加载完毕
- 首次使用需要安装相关的构建工具,我们同意相关协议,然后下一步,等待下载完成后,关闭即可
- 等待所有安装完成,点击右上角绿色的运行按钮,会弹出对应的 Android模拟器设备的窗口
- 安卓模拟器会显示你开发的页面
五、真机调试
真机调试分为两部分,一是手机端设置,二是 Android Studio 的设置
手机端设置
- 打开手机的开发者选项,由于各个手机厂商的打开方式都不同,下面列出一些常用手机:
小米手机:连续点击三下 “MIUI 版本”
华为手机:连续点击 “版本号” 多次,直到屏幕提示已进入开发者模式。
三星手机:连续快速点击多次 “软件信息” 按钮,直到屏幕提示已进入开发者模式。
OPPO、VIVO、魅族、锤子等手机品牌:连续点击 “版本号” 或 “软件版本号” 多次
- 进入开发者选项,打开USB调试,选择 USB 的连接方式(近充电、传输文件、传输照片等,不要选择充电模式,确保电脑和手机可以进行传输)
- 插入USB数据线连接,成功连接后,Android Studio 会显示出该手机设备
Android Studio 的设置
此时切换到Android Studio上,即可看到自己的手机设备,点击运行,在手机上安装APP,即可运行
注意:此部分对于部分人的设备可能连接手机之后还需要对 Android Studio 进行设置,但是我这个没有设置就可以直接用了,所以仅供参考,要找到适合自己的方法最重要。
六、项目打包(APK)
我们项目完成,也调试好了,那么就要将项目打包成 APK 安装包在手机上安装。
APK 版本
APK 分为 Debug 和 Release 版本。我们在模拟器上运行时,会生成 Debug版本的安装包,但是它是运行生成的,不是打包生成的,所以是不能够直接安装到我们手机上的。
如何查看Debug版本的 APK
把当前项目切换成 Project 模式,然后找到 app/build
文件夹。只要你的项目运行了,就会生成这个文件夹,然后就可以看到当前的 apk
此时如果将这个 apk 在手机上试着安装一下,就会提示安装失败。
这是因为:只有 release 版本的 APK 才能安装在手机上。
生成 release 版本的 APK(手机可正常安装版本)
- 点击导航栏的 Build → Generate Signed Bundle / APK…
- Android Studio 版本在3.3以上的会出现下图所示,选择 APK,点击 Next。较低版本的会直接进入第三步。
- 第一次打包需要创建 key 文件,点击 Create new
- 点击 path 右侧文件夹图标
- 这里创建一个文件夹(名称自定义),File name 填写自己定义的 jks 文件名,比如abc(这里第一次创建的时候可能会懵圈,jks 文件是哪里来的,这里明确一下,jks 文件就是我们自定义要生成的),点击 ok
- 最上边的 Password 是 jks 的密码,Confirm 是确认密码;Key 字段下边的 Alias 是用户名,Password 是 key 密码,Certificate 中至少需要填写一项,然后点击 OK
- 此时点击 Next 下一步
- Build Variants 中选择打 debug 包还是 release 包,我们这里选择 release 版本包,然后选择签名版本,然后 Finish
补充:
- 这里说一下签名版本 Signature Vsersions 中的 V1 和 V2 的区别?
V1签名是对 jar 进行签名,V2签名是对整个 apk 签名。
官方介绍就是:V2签名是在整个APK文件的二进制内容上计算和验证的,V1是在归档文件中解压缩文件内容。 - 二者签名所产生的结果?
V1签名:在V1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改——文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理。
V2签名:V2签名验证了归档中的所有字节,而不是单独的zip条目,如果您在构建过程中有任何定制任务,包括篡改或处理APK文件,请确保禁用它们,否则您可能会使V2签名失效,从而使您的APKs与Android 7.0和以上版本不兼容。 - 结论?
一定可行的方案: 只使用 V1签名 方案
不一定可行的方案:同时使用 V1签名 和 V2签名 方案
对 7.0 以下一定不行的方案:只使用 V2签名 方案
或者
1,如果要支持 Android 7.0 以下版本,那么尽量同时选择两种签名方式,但是一旦遇到签名问题,可以只使用 V1 签名方案
2,如果需要对签名后的信息做处理修改,那就使用 V1签名 方案
3,如果最后遇到各种不同的问题,可以不勾选 V1 和 V2,直接打包签名
- 我们刚才打的是 release 包,进入 app/release 文件夹,可以看到,apk包已经生成。
- 我们将生成的 apk 文件通过 QQ 发送到手机上,就可以直接下载安装了。
- 下次签名时,我们直接选择之前创建的 jks 文件(一般系统会默认选择),输入 key用户名,密码,即可打包。
七、clean项目
有时候我们把代码改动了,出现一些莫名其妙的错误,Android Studio的自动编译没有成功,导致运行结果不正常,这时候我们就需要对项目进行清理,也就是 clean project。
- 在 Android Studio 左侧的项目目录面板上,把 “android” 改成 “project” 的形式展示
- 在 clean project 之前,在 “app” —— “build” —— “outputs” 里,有存放临时编译成的 apk
- 这些 apk 有可能就是导致我们项目出现异常错误的罪魁祸首
- 找到菜单栏里的 “build”,如图,选择 “clean project”,就可以清除之前编译的临时项目
- 带 clear 完成之后,再次查看 “app” —— “build” —— “outputs” 目录,会发现原来的 “apk” 被清除掉了。
- 此时再重新编译项目,部分异常错误就消失了。
踩坑总结
上面已经介绍了一整套完整的开发流程,下面我将总结一下在我的项目开发过程中碰到的各种坑,希望大家能够避免踩到类似的坑。
1. AndroidStudio [WARNING] —— android.disableResourceValidation=true
问题:
- The option setting ‘android.disableResourceValidation=true’ is experimental and unsupported.
分析:
- 存在不支持的 resource 文件或文件格式有问题。
解决方案:
- 在项目的
gradle.properties
文件中添加android.disableResourceValidation=true
忽略该问题。 - 在 File -> settings -> Editor -> File Encodings 编码格式统一修改为 UTF-8。
2. the ADB binary found at ... is obsolete and has seroiusperformance problems with the Android Emulato
问题:
- the ADB binary found at … is obsolete and has seroiusperformance problems with the Android Emulator. Please update to a newer version to get significantly faster app/file transfer
分析:
- 错误大意:ADB二进制文件位于……已过时,并且具有与Android模拟器的性能问题。请更新到较新版本,以获得显著更快的应用/文件传输
- 意思就是有文件需要升级
解决方案:
- 打开
SDK manageer
- 选择
SDK tools
,会看到类似于以下内容 - 在最后一列的 Staus 显示 Update Available xxx 字样,
- 有以上内容说明有新的更新,然后选中该更新内容进行更新即可。
3. Android Studio [Build] —— Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id ‘com.android.internal.application’]
问题:
- Android Studio运行项目出现Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id ‘com.android.internal.application’]
Caused by: org.gradle.api.tasks.StopExecutionException: Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See http://b.android.com/95744 for details. This warning can be disabled by adding the line ‘android.overridePathCheck=true’ to gradle.properties file in the project directory.
解决方案:
- 在
Gradle.Scripts
中的gradle.properties
添加android.overridePathCheck=true
即可解决。 - 添加完成后在点击右上角的刷新就可以了
注意:所有更新都需要刷新一下代码。
4. AndroidStudio [异常] —— Unsupported Modules Detected: Compilation is not supported for following modules
问题:
- Unsupported Modules Detected: Compilation is not supported for following modules: MTServer.MTServer, MTServer.MTServer.test, MTServer.MTServer.main. Unfortunately you can’t have non-Gradle Java modules and Android-Gradle modules in one project.
分析:
- 内容修改之后没有进行同步刷新。
解决方案:
- 点击
Sycn Project With Gradle Files
按钮同步一下即可(如果工具栏中找不到 , 在 菜单栏 -> View -> 选中 Toolbar , 即可在菜单栏中找到 上面的 Sync 按钮 ) - File -> Settings(Shift + Alt + S) -> Plugins -> Installed -> 取消“Android Support”
5. AndroidStudio [异常] —— AndroidStudio SSL peer shut down incorrectly
问题:
- AndroidStudio 编译时出现如下问题
SSL peer shut down incorrectly
或者某些jar包下载不下来,一般是因为墙的原因导致的。
分析:
- 这时候我们就需要配置镜像来解决这个问题。(为了提高jar包的下载速度也可以配置)
解决方案:
- 配置的方法就是在根
build.gradle
中添加镜像仓库,一般我们选择阿里的http://maven.aliyun.com/nexus/content/groups/public/
buildscript {
repositories {
maven { url 'https://jitpack.io' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
jcenter()
}
dependencies {
.....
}
}
allprojects {
repositories {
maven { url 'https://jitpack.io' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
jcenter()
}
}
- 这里需要注意要将
jcenter()
放到最后一个,因为他就是那个下载慢,或者报错的罪魁祸首
6. 碰到莫名其妙的错误时,记得 clean project 或者 Sycn Project With Gradle Files
同步刷新项目。
以上就是我在体验开发 Android 应用时碰到的问题已经总结的方法,由于我也没有深入接触 Android 开发,所以部分开发问题我也不能解决。
大家可以在项目开发过程中多多总结。