前言

临时安排接手一个 Android 应用项目开发,庆幸的是 Android APP 已经开发完成,我只需要在我的电脑上运行起来打包看一下效果即可,但是对于一个从未接触过安卓开发的我来说真的是费尽脑汁,并且这个前期准备真的是太麻烦了,而且会出现各种意想不到的问题。

所以,我利用闲暇时间整理一下本次 Android 开发的体验经历,同时为其他没有接触过 Android 开发的小伙伴提供一下开发思路。

如果懂行的小伙伴看出了什么门道,欢迎留言讨论,为其他小伙伴提供更多解决问题的思路。


一、开发环境快速搭建

1. 下载 JDK

官网下载地址:JDK - 传送门

选择下载相应版本的 JDK,同意协议后下载即可。

android 禁用logd_安卓


如果在这一步下载有问题的话,可以去看一下具体的下载方式,网上对于 JDK 下载的教程有很多,我在这里就不过多赘述了。

2. 下载 Android SDK

由于某些限制,很难打开并且下载官网上的 SDK,所以这里为大家推荐国内的 Android 工具的下载网站:AndroidDevTools - 传送门

可以在顶部菜单栏选择 “Android SDK 工具” => “SDK Tools”,会自动跳转至该下载模块;也可以直接下滑至 “SDK Tools” 模块。

android 禁用logd_app_02


选择适合自己的版本进行下载即可。

android 禁用logd_android 禁用logd_03


将下载后的安装包解压到相应的目录下。


二、Android Studio

1. 下载

Android Studio 的下载也可以在刚才推荐的国内的 Android 工具的下载网站上下载:AndroidDevTools - 传送门

第一个就是,选择版本直接下载即可。

2. 安装

这里推荐大家看一下 Android Studio 开发环境快速搭建 这篇文章里的 4.安装Android Studio,还是比较详细的,在这里我就不过多赘述了。


三、创建并启动一个安卓模拟器

至此,你应该将你的 JDK、SDK 和 Android Studio 等都搭建完成。

我们在安装了一个 Android SDK 后,就可以创建一个对应版本的模拟器啦。

  1. 启动 Android Studio ,点击下面按钮,进入创建模拟器管理页面
  2. android 禁用logd_app_04

  3. 点击 + Create Virtual Device 创建模拟器
  4. android 禁用logd_app_05

  5. 在弹出的页面中,Categroy 类型选择 “Phone”,并选择一款手机型号,单机 Next 按钮(Play Store 列没有三角形的,就无需下载其他组件)
  6. android 禁用logd_安卓_06

  7. 下载对应的镜像,点击 Next 继续
  8. android 禁用logd_android 禁用logd_07

  9. 在新页面中设置 Android 模拟器
    AVD Name:模拟器名字
    Nexus 5X:手机型号,屏幕尺寸为5.2英寸,分辨率为1080*1920(单位:像素),420dpi
    R:对应的Android版本11.0 x86
    Startup orientation:模拟器横屏或者竖屏显示
    Graphics:选择模拟器中的渲染图形
    Device Frame:是否显示手机外形,可以不勾选。
    设置完成,单击 Finish 按钮,即完成 Android 模拟器的创建。
  10. android 禁用logd_安卓_08

  11. 在 Android 模拟器管理列表中,选择创建的 Android 模拟器,在 Actions 一列中单机三角形启动按钮,启动模拟器
  12. android 禁用logd_安卓_09

  13. 启动成功,如图:
  14. android 禁用logd_安卓_10


四、运行项目

上面我们已经把环境和模拟器都创建好了,下面我们开始创建并运行一个项目。

  1. 可以在一开始创建一个 Android 应用,或者在内部选择 “File” => “New” => “New Project”,创建一个项目。
  2. android 禁用logd_android_11

  3. android 禁用logd_java_12

  4. 选择一个 Activity,默认选择空的 Activity 即可。
  5. android 禁用logd_android 禁用logd_13

  6. 配置 Activity,用默认的就好,不需要修改
  7. android 禁用logd_安卓_14

  8. 第一次创建项目可能会这样,Finish 即可
  9. android 禁用logd_安卓_15

  10. 首次进入项目主界面,等待加载完毕
  11. android 禁用logd_app_16

  12. 首次使用需要安装相关的构建工具,我们同意相关协议,然后下一步,等待下载完成后,关闭即可
  13. android 禁用logd_安卓_17


  14. android 禁用logd_java_18


  15. android 禁用logd_app_19


  16. android 禁用logd_app_20

  17. 等待所有安装完成,点击右上角绿色的运行按钮,会弹出对应的 Android模拟器设备的窗口
  18. android 禁用logd_安卓_21

  19. 安卓模拟器会显示你开发的页面
  20. android 禁用logd_android_22


五、真机调试

真机调试分为两部分,一是手机端设置,二是 Android Studio 的设置

手机端设置

  1. 打开手机的开发者选项,由于各个手机厂商的打开方式都不同,下面列出一些常用手机:

小米手机:连续点击三下 “MIUI 版本”
华为手机:连续点击 “版本号” 多次,直到屏幕提示已进入开发者模式。
三星手机:连续快速点击多次 “软件信息” 按钮,直到屏幕提示已进入开发者模式。
OPPO、VIVO、魅族、锤子等手机品牌:连续点击 “版本号” 或 “软件版本号” 多次

  1. 进入开发者选项,打开USB调试,选择 USB 的连接方式(近充电、传输文件、传输照片等,不要选择充电模式,确保电脑和手机可以进行传输)
  2. 插入USB数据线连接,成功连接后,Android Studio 会显示出该手机设备

Android Studio 的设置

此时切换到Android Studio上,即可看到自己的手机设备,点击运行,在手机上安装APP,即可运行

android 禁用logd_app_23


注意:此部分对于部分人的设备可能连接手机之后还需要对 Android Studio 进行设置,但是我这个没有设置就可以直接用了,所以仅供参考,要找到适合自己的方法最重要。


六、项目打包(APK)

我们项目完成,也调试好了,那么就要将项目打包成 APK 安装包在手机上安装。

APK 版本

APK 分为 Debug 和 Release 版本。我们在模拟器上运行时,会生成 Debug版本的安装包,但是它是运行生成的,不是打包生成的,所以是不能够直接安装到我们手机上的。

如何查看Debug版本的 APK

把当前项目切换成 Project 模式,然后找到 app/build 文件夹。只要你的项目运行了,就会生成这个文件夹,然后就可以看到当前的 apk

android 禁用logd_安卓_24


此时如果将这个 apk 在手机上试着安装一下,就会提示安装失败。

android 禁用logd_android 禁用logd_25


这是因为:只有 release 版本的 APK 才能安装在手机上。

生成 release 版本的 APK(手机可正常安装版本)

  1. 点击导航栏的 Build → Generate Signed Bundle / APK…
  2. android 禁用logd_安卓_26

  3. Android Studio 版本在3.3以上的会出现下图所示,选择 APK,点击 Next。较低版本的会直接进入第三步。
  4. android 禁用logd_app_27

  5. 第一次打包需要创建 key 文件,点击 Create new
  6. android 禁用logd_安卓_28

  7. 点击 path 右侧文件夹图标
  8. android 禁用logd_android_29

  9. 这里创建一个文件夹(名称自定义),File name 填写自己定义的 jks 文件名,比如abc(这里第一次创建的时候可能会懵圈,jks 文件是哪里来的,这里明确一下,jks 文件就是我们自定义要生成的),点击 ok
  10. android 禁用logd_android_30

  11. 最上边的 Password 是 jks 的密码,Confirm 是确认密码;Key 字段下边的 Alias 是用户名,Password 是 key 密码,Certificate 中至少需要填写一项,然后点击 OK
  12. android 禁用logd_android 禁用logd_31

  13. 此时点击 Next 下一步
  14. android 禁用logd_安卓_32

  15. Build Variants 中选择打 debug 包还是 release 包,我们这里选择 release 版本包,然后选择签名版本,然后 Finish

    补充:
  1. 这里说一下签名版本 Signature Vsersions 中的 V1 和 V2 的区别?
    V1签名是对 jar 进行签名,V2签名是对整个 apk 签名。
    官方介绍就是:V2签名是在整个APK文件的二进制内容上计算和验证的,V1是在归档文件中解压缩文件内容。
  2. 二者签名所产生的结果?
    V1签名:在V1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改——文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理。
    V2签名:V2签名验证了归档中的所有字节,而不是单独的zip条目,如果您在构建过程中有任何定制任务,包括篡改或处理APK文件,请确保禁用它们,否则您可能会使V2签名失效,从而使您的APKs与Android 7.0和以上版本不兼容。
  3. 结论?
    一定可行的方案: 只使用 V1签名 方案
    不一定可行的方案:同时使用 V1签名 和 V2签名 方案
    对 7.0 以下一定不行的方案:只使用 V2签名 方案
    或者
    1,如果要支持 Android 7.0 以下版本,那么尽量同时选择两种签名方式,但是一旦遇到签名问题,可以只使用 V1 签名方案
    2,如果需要对签名后的信息做处理修改,那就使用 V1签名 方案
    3,如果最后遇到各种不同的问题,可以不勾选 V1 和 V2,直接打包签名
  1. 我们刚才打的是 release 包,进入 app/release 文件夹,可以看到,apk包已经生成。
  2. android 禁用logd_android 禁用logd_33

  3. 我们将生成的 apk 文件通过 QQ 发送到手机上,就可以直接下载安装了。
  4. 下次签名时,我们直接选择之前创建的 jks 文件(一般系统会默认选择),输入 key用户名,密码,即可打包。

七、clean项目

有时候我们把代码改动了,出现一些莫名其妙的错误,Android Studio的自动编译没有成功,导致运行结果不正常,这时候我们就需要对项目进行清理,也就是 clean project。

  1. 在 Android Studio 左侧的项目目录面板上,把 “android” 改成 “project” 的形式展示
  2. android 禁用logd_app_34

  3. 在 clean project 之前,在 “app” —— “build” —— “outputs” 里,有存放临时编译成的 apk
  4. android 禁用logd_java_35

  5. 这些 apk 有可能就是导致我们项目出现异常错误的罪魁祸首
  6. 找到菜单栏里的 “build”,如图,选择 “clean project”,就可以清除之前编译的临时项目
  7. android 禁用logd_android_36

  8. 带 clear 完成之后,再次查看 “app” —— “build” —— “outputs” 目录,会发现原来的 “apk” 被清除掉了。
  9. android 禁用logd_app_37

  10. 此时再重新编译项目,部分异常错误就消失了。

踩坑总结

上面已经介绍了一整套完整的开发流程,下面我将总结一下在我的项目开发过程中碰到的各种坑,希望大家能够避免踩到类似的坑。

1. AndroidStudio [WARNING] —— android.disableResourceValidation=true

问题:

  • The option setting ‘android.disableResourceValidation=true’ is experimental and unsupported.

分析:

  • 存在不支持的 resource 文件或文件格式有问题。

解决方案:

  1. 在项目的 gradle.properties 文件中添加 android.disableResourceValidation=true 忽略该问题。
  2. 在 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模拟器的性能问题。请更新到较新版本,以获得显著更快的应用/文件传输
  • 意思就是有文件需要升级

解决方案:

  1. 打开 SDK manageer
  2. android 禁用logd_安卓_38

  3. 选择 SDK tools,会看到类似于以下内容
  4. android 禁用logd_app_39

  5. 在最后一列的 Staus 显示 Update Available xxx 字样,
  6. android 禁用logd_android_40

  7. 有以上内容说明有新的更新,然后选中该更新内容进行更新即可。

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.

解决方案:

  1. Gradle.Scripts 中的 gradle.properties 添加 android.overridePathCheck=true 即可解决。
  2. 添加完成后在点击右上角的刷新就可以了

    注意:所有更新都需要刷新一下代码。

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.

分析:

  • 内容修改之后没有进行同步刷新。

解决方案:

  1. 点击 Sycn Project With Gradle Files 按钮同步一下即可(如果工具栏中找不到 , 在 菜单栏 -> View -> 选中 Toolbar , 即可在菜单栏中找到 上面的 Sync 按钮 )
  2. android 禁用logd_android_41

  3. 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包的下载速度也可以配置)

解决方案:

  1. 配置的方法就是在根 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()
    }
}
  1. 这里需要注意要将 jcenter() 放到最后一个,因为他就是那个下载慢,或者报错的罪魁祸首

6. 碰到莫名其妙的错误时,记得 clean project 或者 Sycn Project With Gradle Files 同步刷新项目。


以上就是我在体验开发 Android 应用时碰到的问题已经总结的方法,由于我也没有深入接触 Android 开发,所以部分开发问题我也不能解决。

大家可以在项目开发过程中多多总结。