安卓应用开发环境

安卓应用开发环境

  • 安卓应用开发环境
    • 安卓Studio下载安装
    • 安卓Gradle下载安装
  • 安装 & 使用&构建问题
    • Android Studio无法下载SDK
    • IDE多开
    • 过滤默认关键字
    • Read timed out
    • Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
    • Using flatDir should be avoided because it doesn‘t support any meta-data formats.
    • SSH变体'simple'不支持设置端口
    • Error: "xxx" is not translated in "zh" (Chinese) [MissingTranslation]
    • cvc-complex-type.2.4.a
    • Failed to find Build Tools revison 30.0.2
    • buildOutput.apkData must not be null
    • Android Studio无法找到CMake
    • CMake was unable to find a build program corresponding to "Ninja"
    • 构建时insecure protocols
    • mips64el-linux-android
    • Error:No such property: GradleVersion for class: JetGradlePlugin
    • Gradle和JDK版本不一致问题
    • Gradle和Gradle Plugin版本对照表
  • 常用命令
    • ADB命令
      • adb无线WIFI连接

本文会持续更新,欢迎各位私信指正~~

安卓应用开发环境

安卓Studio下载安装

安卓官网:https://developer.android.google.cn/studio
国内推荐:https://www.androiddevtools.cn/

安卓Gradle下载安装

  • 默认配置
    安卓应用开发环境_第1张图片
    Gradle配置文件:项目根/gradle/wrapper/gradle-wrapper.properties
    distributionBase:下载的Gradle压缩包解压后存储的主目录GRADLE_USER_HOME默认指向C:\Users…gradle
    distributionPath:相对于distributionBase的解压缩后的Gradle压缩包的路径
    zipStoreBase:同distributionBase,只不过是存放zip压缩包的
    zipStorePath:同distributionPath,只不过是存放zip压缩包的
    distributionUrl:设置下载的Gradle压缩包的服务器路径,以及决定了这个项目使用的gradle版本
    从distributionUrl地址下载的Gradle会保存在1处指定的目录中。
  • 手动配置
    安卓应用开发环境_第2张图片
    1、在官网下载Gradle压缩包。
    1.1 Gradle下载地址
    Gradle国内:https://mirrors.cloud.tencent.com/gradle/
    Gradle官网:https://gradle.org/releases/
    下载地址:https://services.gradle.org/distributions/
    2、自定义Gradle配置
    2.1 File>Settings…>搜索Gradle。
    2.2 1处为全局设置Gradle的存放路径。也就是在Android Studio环境中需要使用Gradle工具,所以就单独给设置了目录,这个目录的路径就是distributionBase的值。
    2.3 2处为当前项目中正在使用的Gradle的存放路径。也就是在这个项目中已经指定版本号的Gradle的路径。估计是考虑到多项目的问题,才这样分层设计。
    默认为项目根目录/gradle/wrapper中的’gradle-wrapper.properties’文件。也可以将2处修改为Specified location:<找到下载的Gradle路径>。
    3、Gradle常用场景
    3.1 如果需要使用非AS自动下载的Gradle,需要将手动下载的Gradle包(不要解压缩)路径粘贴到1处/wrapper/dists/对应的gradle文件/xxx…/目录中即可。当然如果比较熟悉这些,只要AS能按照你自定义的路径,找到压缩包并自动解压出来,也可以随便放。
    3.2 如果需要将项目从外网迁移到内网继续开发,内网无法下载Gradle中配置的依赖包,就需要将该目录下的所有文件全部迁移到内网环境中,因为此目录(默认2处路径)中包含所有同步sync下来的依赖包。

安装 & 使用&构建问题

Android Studio无法下载SDK

  • 方案一:
  1. 使用在线ping工具,ping dl.google.com
    在线工具非常多,随便找一个https://ping.chinaz.com/,输入dl.google.com
    安卓应用开发环境_第3张图片
  2. 选择响应快的ip地址
    在这里插入图片描述
  3. 将选中的ip加入hosts文件末尾
120.253.255.97 dl.google.com    # 写入hosts文件末尾
系统 host文件路径
windows C:\Windows\System32\drives\etc\hosts
linux /etc/hosts
Mac /etc/hosts
Android /system/etc/hosts
iPhone /etc/hosts

说明:Linux、Mac 使用 Root 权限;iPhone、iPad 须越狱、Android 必须要 root。Windows:在 CMD 窗口输入ipconfig /flushdns刷新生效。Linux 命令:sudo nscd restart刷新生效。
此外,使用这种方式可以用于github。

20.205.243.166         github.com
185.199.109.153       github.io
  • 方案二
    通过配置国内代理访问国外仓库地址:https://services.gradle.org/distributions/gradle-x.x.x-all.zip
    打开File>Setting>Appearance & Behavior>System Settings>HTTP Proxy
    选择Auto-detect proxy configuration URL:,然后输入国内代理服务地址之一(参考下面的开源镜像站),点击Check connection,检查需要代理的目标地址是否能够链接成功。
    安卓应用开发环境_第4张图片
    搜集到的一些开源镜像站:
    1、东软信息学院:mirrors.neusoft.edu.cn port:80
    2、北京化工大学:ubuntu.buct.edu.cn/ubuntu.buct.cn port:80
    3、中国科学院开源协会:mirrors.opencas.cn (mirrors.opencas.org/mirrors.opencas.ac.cn) port:80
    4、上海GDG镜像服务器:sdk.gdgshanghai.com port:8000
    5、电子科技大学:mirrors.dormforce.net port:80
名称 地址
中国科学技术大学 http://mirrors.ustc.edu.cn/
阿里 https://mirrors.aliyun.com/android.googlesource.com/
腾讯 https://mirrors.cloud.tencent.com/AndroidSDK/
清华大学 https://mirrors.tuna.tsinghua.edu.cn/
搜狐 http://mirrors.sohu.com/
网易 http://mirrors.163.com/
北京交通大学 http://mirror.bjtu.edu.cn
兰州大学 http://mirror.lzu.edu.cn/
上海交通大学 http://ftp.sjtu.edu.cn/
东北大学 http://mirror.neu.edu.cn/
东软信息学院 http://mirrors.neusoft.edu.cn/
重庆大学 http://mirrors.cqu.edu.cn/

IDE多开

有时候为了方便修改了默认设置,但某些场景下有需要多开IDE,记录一下设置过程:
File > Settings > Appearance & Behavior > System Settings
在设置页面中,Reopen projects on startup根据需要选择多开方式。
安卓应用开发环境_第5张图片

过滤默认关键字

package:mine

Read timed out

根因:一般是Gradle的问题。请检查gradle-wrapper.properties中的distributionUrl指定版本的Gradle有没有下载完成,找到正在使用的Gradle的安装路径:distributionBase指定的路径\wrapper\dists\gradle-x.x.x-x\dmo…k0deb\,检查此目录下有没有gradle-x.x.x-x.zip文件和它的大小是否正常。
解决方法:手动下载Gradle包,放在Gradle的安装路径下即可,不用解压。

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

切换到Terminal页面,在终端窗口执行gradlew compileDebug --stacktrace,或者gradle compileDebug --stacktrace

Using flatDir should be avoided because it doesn‘t support any meta-data formats.

升级了Android Studio和Gradle后,运行的时候会出现警告.
1、将项目中的目录添加进来。在app/build.gradle文件下增加sourceSets节点。
2、将编译时需要的.jar/.aar文件添加到依赖项中。

android {
...
	sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.?ar'], dir: 'libs')
    implementation files('libs/XXX.aar')
...
}

SSH变体’simple’不支持设置端口

ssh variant ‘simple’ does not support setting port
在ubuntu上git工具升级到2.42.0后出现报错不能拉代码。原因是git 2.16.x 以上的版本上 ssh variant 需要手动设置为 ssh。解决方法:

git config --global ssh.variant ssh

Error: “xxx” is not translated in “zh” (Chinese) [MissingTranslation]

方法1:在资源文件的根标签下添加属性tools:ignore="MissingTranslation

<resources  xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">

方法2:子标签属性添加属性translatable="false"

<string name="name"  translatable="false">Androidstring>

cvc-complex-type.2.4.a

老项目用较新的IDE打开后,出现cvc-complex-type.2.4.a:发现了以元素’base-extension’开头的无效内容。应以’layoutlib’之一开头。
打开File>Project Structure>Project修改配置,参考下面的Gradle和Gradle Plugin版本对照表。

Gradle Version:5.4.1 +
Android Plugin Version:3.5.2 +

Failed to find Build Tools revison 30.0.2

原因:SDK中缺少必需的基本的核心的开发工具包30.0.2
工具包路径:在1处指定的路径下AndroidSdk目录中的\build-tools下,有各个API平台的对应的工具包。
解决办法:重新安装工具包
具体操作:在Android SDK的SDK Tools中,勾选Show Package Details展开显示所有子选项,先取消勾选有问题的工具包,点击Apply按钮后开始卸载有问题工具包;等Finish后在勾选这个工具包,点击Apply开始安装此包。
Android SDK Tools是一种开发工具集,主要用于Android平台上的应用程序开发。它提供了许多有用的工具,包括模拟器调试器编译器打包工具等等,但这些不是固定的,它们会随着谷歌的修改变化位置,比如说模拟器已经从工具包中迁移到外面,adb迁移到platform-tools目录中。
安卓应用开发环境_第6张图片

buildOutput.apkData must not be null

方案1:Build -> Clean Project,Build -> Make Project
方案2:Build -> Clean Project,Build -> Rebuild Project
方案3:动删除所有module自动生成的build文件夹

Android Studio无法找到CMake

Errror: Unable to find CMake with version:3.10.2 within folder:[…
解决办法:重新安装CMake工具包或者手动下载安装。
CMake官网下载地址:https://cmake.org/download/
有两种选择:源码版本和二进制版本,这里根据项目选择下载历史版本3.10.2(下载地址:https://cmake.org/files/)

CMake was unable to find a build program corresponding to “Ninja”

使用cmake工具且选用Ninja作为编译工具编译时报错,找不到Ninja的程序
Ninja官网:https://ninja-build.org/
官网出问题或者无法下载时,可以使用源码编译后安装。

构建时insecure protocols

项目构建时报错:Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository ‘maven(XXX)’ to redirect to a secure protocol (like HTTPS) or allow insecure protocols.
原因:不兼容https请求协议,无法链接到服务器。

maven {
            allowInsecureProtocol true //添加这一行时注意格式或者将url中的http修改为https
            url 'http://xxx'
}

mips64el-linux-android

No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
下载ndk后找到缺失的添加:【新版本】https://developer.android.google.cn/ndk/downloads/
【旧版本】https://developer.android.google.cn/ndk/downloads/older_releases
https://github.com/android/ndk/wiki/Unsupported-Downloads
这里需要逐个下载找很麻烦,如果条件允许,推荐删除NDK后重新下载比较方便。

Error:No such property: GradleVersion for class: JetGradlePlugin

排查原因:首先检查项目根目录下的build.gradle文件中repositories中maven的格式和值设置是否正确,有没有不正常的文字出现。然后再检查Gradle版本和AGP的版本是不是对应,参考Gradle和Gradle Plugin版本对照表。

Gradle和JDK版本不一致问题

  • Failed to notify dependency resolution listener.
    ‘void org.gradle.api.artifacts.DependencySubstitutions$Substitution.with(org.gradle.api.artifacts.component.
    ComponentSelector)’
  • Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
  • Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not “opens java.io” to unnamed module

这种非项目代码的报错,很可能是gradle版本和JDK版本不一致导致的,如果使用的是openJDK8,也有可能会遇到问题,可以结合后面的AGP的版本一起调试。
项目使用gradle为编译工具,gradel和jdk版本对应关系如下:https://docs.gradle.org/8.3/userguide/compatibility.html

Java version Support for compiling/testing/… ​ Support for running Gradle
8 N/A 2.0
9 N/A 4.3
10 N/A 4.7
11 N/A 5.0
12 N/A 5.4
13 N/A 6.0
14 N/A 6.3
15 6.7 6.7
16 7.0 7.0
17 7.3 7.3
18 7.5 7.5
19 7.6 7.6
20 8.1 8.3

Gradle和Gradle Plugin版本对照表

官网Android Gradle 插件版本说明:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn
用法:根据项目的AGP版本,Gradle版本应选择不低于最低版本的版本。比如项目build.gradle版本是7.1.2,那Gradle的版本不能低于7.2。

插件版本 所需的最低 Gradle 版本
8.1 8.0
8.0 8.0
7.4 7.5
7.3 7.4
7.2 7.3.3
7.1 7.2
7.0 7.0
4.2.0+ 6.7.1
3.5.0 5.4.1+
3.4.0 - 3.4.1 5.1.1+
3.3.0 - 3.3.2 4.10.1+
3.2.0 - 3.2.1 4.6+
3.0.0+ 4.1+
2.3.0+ 3.3+
2.1.3 - 2.2.3 2.14.1+
2.0.0 - 2.1.2 2.10 - 2.13
2.0.0 - 2.1.2 2.10 - 2.13
1.5.0 2.2.1 - 2.13
1.2.0 - 1.3.1 2.2.1 - 2.9
1.0.0 - 1.1.3 2.2.1 - 2.3

常用命令

ADB命令

> adb shell getprop ro.hw.country //查询hw手机发货地址
> adb shell getprop ro.build.version.emui  //查询hw手机EMUI版本
> adb shell getprop ro.product.cpu.abi   //查询芯片是32位还是64位
> adb shell getprop ro.product.manufacturer   //查询设备制造商
> adb shell getprop ro.product.brand  //查询手机品牌
> adb shell getprop ro.product.model  //查询手机内部代号
> adb shell getprop ro.product.name  //查询设备名称
> adb shell getprop ro.serialno  //查询设备序列号
> adb shell getprop ro.build.version.release //查询手机Android系统版本
> adb shell am monitor  //获取包名:先执行此命令后启动APP
> adb shell dumpsys window | findstr mCurrentFocus  //获取包名:先启动APP后执行此命令
> adb shell pm list package -3 //获取所有已安装的第三方应用包名
> aapt dump badging apk本机路径  //获取计算机本机(未安装)存储的APK包名
> aapt dump xmltree apk本机路径 AndroidManifest.xml | findstr “package”  //获取计算机本机(未安装)存储的APK包名
> adb kill-server/adb start-server  //设备未连接可尝试重启adb服务
> adb -s 设备名 install apk本机路径  //计算机连接多个设备,安装应用到指定的设备

adb无线WIFI连接

  • 1、用USB数据线连接手机,打开USB调试功能。
    如果安卓设备有“无线调试”选项就打开此选项;如果没有“无线调试”选项如华为手机,就打开“仅充电模式下允许ADB调试”选项。·
    adb devices // 检查USB连接,查询设备名
    在这里插入图片描述
  • 2、将手机和计算机处于同一局域网中,通过计算机指定安卓设备的tcpip端口号。注意:这里只要在同一局域网就行,可以满足特殊场景下的连接调试。
    adb tcpip 5588 //开启默认设备的adb无线模式服务
    adb -s 设备名 tcpip 5588 //开启指定设备的无线模式,这里可以开启多个设备。
    开启无线模式服务后,此时可以断开USB数据线.
  • 3、无线连接手机设备。
    方式1:查找设备的IPv4地址(如192.168.0.7),可以使用命令
    adb shell ifconfig | findstr "inet addr" //linux上将findstr换成grep
    即可输出:inet addr:192.168.0.7,也可以在手机上查看。
    方式2:使用如下命令连接设备。
    adb connect 192.168.0.7:5588
    可以同时无线连接多台设备。
  • 4、断开无线连接
    一般情况下,断开WIFI后再重连同一WIFI,等几秒会自动连接到移动设备。
    当不需要连接设备时,可以使用如下命令:
    adb disconnect 192.168.0.7:5588 //或者用adb usb命令断开,或者重启手机
  • 另外,USB连接模式和无线调试模式
    adb usb // restarts the adbd daemon listening on USB
    adb tcpip 端口号 //restarts the adbd daemon listening on TCP on the specified port

你可能感兴趣的:(android)