安卓应用开发环境
- 安卓应用开发环境
- 环境安装 & 工具使用&构建问题
- Android Studio无法下载SDK
- 安卓Gradle下载安装
- Could not find method dependencyResolutionManagement() for arguments...
- 常用Maven仓库
- Unknown host '不知道这样的主机。 (repo.maven.apache.org)'. You may need to adjust the proxy settings in Gradle.
- Cause: unable to find valid certification path to requested target
- IDE多开
- 过滤默认关键字
- AS IDE build打印乱码
- 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版本对照表
- Could not create task ':app:processDebugResources'.
- Cause: class org.gradle.internal.compiler.java.ClassNameCollector
- Android resource linking failed
- Execution failed for task ':app:packageDebug'.
- Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
- 基础知识
本文会持续更新,欢迎各位私信指正~~
安卓应用开发环境
安卓Studio IDE下载安装
安卓官网:https://developer.android.google.cn/studio
国内推荐:https://www.androiddevtools.cn/
环境安装 & 工具使用&构建问题
Android Studio无法下载SDK
- 方案一:
- 使用在线ping工具,ping dl.google.com
在线工具非常多,随便找一个https://ping.chinaz.com/dl.google.com,输入dl.google.com
- 选择响应快的ip地址
- 将选中的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,检查需要代理的目标地址是否能够链接成功。
搜集到的一些开源镜像站:
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/ |
安卓Gradle下载安装
- 默认配置
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处指定的目录中。 - 手动配置
1、在官网下载Gradle压缩包。
1.1) Gradle下载地址
Gradle网页:https://gradle.org/releases/
官方Gradle服务:https://services.gradle.org/distributions/
华为Gradle服务:https://mirrors.huaweicloud.com/gradle/
腾讯Gradle服务:https://mirrors.cloud.tencent.com/gradle/
阿里Gradle服务:https://mirrors.aliyun.com/macports/distfiles/gradle/
2、自定义Gradle配置
2.1) File>Settings…>搜索Gradle,找到如上图的Gradle配置页面。
2.2) 1处为当前项目Gradle的存放路径。也就是从distributionUrl的服务器下载的Gradle工具,可以存储在1处Gradle user home指定的目录下,这个目录的路径就是distributionBase的值。
2.3) 2处为当前项目中正在使用的Gradle的存放路径。也就是在这个项目中指定Gradle的使用路径。估计是考虑到多项目的问题,才这样分层设计。
默认为项目根目录/gradle/wrapper中的’gradle-wrapper.properties’文件。也可以将2处修改为Specified location:<找到下载的Gradle路径>。
3、Gradle常用场景
3.1) 一般情况下,修改项目中的distributionUrl为大厂的代理地址就可以自动下载到图中的1处,注意https后需要添加右斜线,如distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip
。
3.2) 如果由于网络等原因无法自动下载Gradle或者下载不完整,就需要自已从网站下载gradle文件(如gradle-8.0-bin.zip),然后将Gradle配置文件中的distributionUrl修改为目标版本号,这里需要注意:将手动下载的Gradle包(不要解压缩)路径粘贴到图中1处路径\wrapper\dists\gradle-8.0-bin\ca5e32b…otwh\目录中即可,最后点击Try Again即完成手动安装。当然如果比较熟悉这些,只要AS能按照你自定义的路径,找到压缩包并自动解压出来,也可以随便放。
注意:有时候会遇到服务不稳,导致下载的gradle包不全,请在…\ca5e32b…otwh\目录中检查是否完整。
3.3) 如果需要将项目从外网迁移到内网继续开发,内网无法下载Gradle中配置的依赖包,就需要将该目录下的所有文件全部迁移到内网环境中,因为此目录(默认图中2处路径)中包含所有同步sync下来的依赖包。
3.4) 如果需要彻底修改图中1处的Gradle的默认下载路径,可以在IDE的安装路径下打开bin目录,找到studio64.exe.vmoptions文件并编辑,添加-Dgradle.user.home=D:\Win10_Programs\develop\Android\AndroidGradle
后保存修改,最后重启AS即可生效。
Could not find method dependencyResolutionManagement() for arguments…
最近新建工程无法运行,如题报错,修复办法:
1、修改build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
// buildscript里是gradle脚本执行所需依赖,分别是对应的maven库和插件
buildscript {
repositories {
// google() //注释
// mavenCentral() //注释
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
dependencies {
classpath "com.android.tools.build:gradle:7.1.2"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//allprojects里是项目本身需要的依赖
allprojects {
repositories {
// google()
// jcenter()
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
tasks.withType(Javadoc) { // 新增
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
plugins {
id 'com.android.application' version '7.1.2' apply false
id 'com.android.library' version '7.1.2' apply false
}
tasks.register('clean', Delete) {
delete rootProject.buildDir
}
2、修改settings.gradle
pluginManagement {
repositories {
// google() //注释
// mavenCentral() //注释
// gradlePluginPortal() //注释
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
// google() //注释
// mavenCentral() //注释
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
}
rootProject.name = "Demo"
include ':app'
常用Maven仓库
Maven全名叫Apache Maven,是一个软件项目管理和项目自动构建的工具。由Apache软件基金会开发。
jcenter()是由JFrog公司提供的Bintray中的Maven仓库。它是当前世界上最大的Java和Android开源软件构件仓库。
官方仓库:https://jcenter.bintray.com
国内仓库:https://maven.aliyun.com/repository/jcenter
jcenter是maven central的超集。也就是说maven central上有的库,jcenter上都有。但是jcenter上有的库,在maven central上不一定有。上传到jcenter上的库,可以一键发布到maven central上,且jcenter的界面更友好。jcenter通过CDN发送library,下载更快。
google()是Google官方的Maven仓库。
官方仓库:https://maven.google.com/web/index.html或https://maven.google.com
国内仓库:https://maven.aliyun.com/repository/google或者https://dl.google.com/dl/android/maven2
mavenCentral()是由sonatype.org维护的Maven仓库。任何人都可以将其项目的工件上传到Sonatype。
官方仓库:https://central.maven.org/maven2
国内仓库:https://maven.aliyun.com/repository/central
jitpack是由jitpack提供的仓库,主要用于检查代码、构建,并提供构建工具jar、aar。
官方仓库:https://jitpack.io
国内仓库:https://jitpack.io
public是一个jcenter和mavenCentral的聚合仓库
国内仓库:https://maven.aliyun.com/repository/public
gradle-plugin是Gradle插件仓库
官方仓库:https://plugins.gradle.org/m2
国内仓库:https://maven.aliyun.com/repository/gradle-plugin
最新版本IDE依赖仓库配置:
仅仅修改settings.gradle配置文件即可,build.gradle中无需修改。
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
google()
mavenCentral()
}
}
rootProject.name = "MyAutoTest"
include ':app'
Unknown host ‘不知道这样的主机。 (repo.maven.apache.org)’. You may need to adjust the proxy settings in Gradle.
计算机无法通过网络连接到Maven中央仓库。可能的原因包括网络连接问题、DNS解析问题或本地hosts文件配置错误。
buildscript {
......
repositories {
......
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }//加上这一句
}
......
}
Cause: unable to find valid certification path to requested target
IDE多开
有时候为了方便修改了默认设置,但某些场景下有需要多开IDE,记录一下设置过程:
File > Settings > Appearance & Behavior > System Settings
在设置页面中,Reopen projects on startup根据需要选择多开方式。
过滤默认关键字
package:mine
AS IDE build打印乱码
在工具栏打开Help>Edit Custom VM Options...
,或者在AS工作区双击shift键,在搜索框中输入Edit Custom VM Options
回车,打开studio64.exe.vmoptions文件,如果没有找到此文件,就点击create创建该文件,并添加-Dfile.encoding=UTF-8
,这里根据实际情况修改编码格式,最后重新运行。
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">Android</string>
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目录中。
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 |
Could not create task ‘:app:processDebugResources’.
Could not create task ‘:app:processDebugResources’.
Cannot use @TaskAction annotation on method IncrementalTask.taskAction$gradle_core() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.
一般是因为gradle的接口有变化导致使用时报异常,这是常态,只要降低一下gradle版本即可。
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
Cause: class org.gradle.internal.compiler.java.ClassNameCollector
完整错误:Cause: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0xaa9da18) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0xaa9da18
原因是jdk版本问题,应当使用jdk1.8版本编译。
Android resource linking failed
完整错误:ERROR:: AAPT: error: resource style/Theme.Material3.DayNight.NoActionBar (aka com.wingtech.wtautotestai:style/Theme.Material3.DayNight.NoActionBar) not found.
error: resource style/Theme.Material3.DayNight.NoActionBar (aka com.wingtech.wtautotestai:style/Theme.Material3.DayNight.NoActionBar) not found.
error: failed linking references.
问题原因:在res/values/themes.xml等文件中删除或者替换掉有问题的主题,注意可能存在多个主题文件。
Execution failed for task ‘:app:packageDebug’.
完整错误:Execution failed for task ‘:app:packageDebug’.
com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store “C:\Users\XXX.android\debug.keystore”: Invalid keystore format
解决办法:关闭所有AS后,找到debug.keystore和debug.keystore.lock文件删除即可。
Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
使用adb命令安装apk时出现如此问题,原因可能是系统检测到apk为测试包或是项目依赖了测试版本的库。
解决方法:在gradle.properties里配置android.injected.testOnly=false
后,Build>Clean Project>重新打包。或者使用adb install -t apk路径强制安装到目标设备。
基础知识
Android设备CPU支持
ABI应用程序二进制接口(Application Binary Interface),abi定义了二进制文件(尤其是.so文件)运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。即就是在Android 系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。
如果在build.gradle中对abiFilters进行配置,那么只有配置过的目录下的so文件才会被打包到apk安装包中。
ndk {
// 指定要ndk需要编译的cpu架构(这样应用依赖包里的x86,x86_64等架构的so会被过滤掉)
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
arm64-v8a:64位ARM设备,目前主流版本(Google Play上架要求app必须适配arm64-v8a),AArch64
armeabi-v7a:32位ARM设备,一些老旧的手机。AArch32
armeabi/mips / mips64:NDK 以前支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但NDK r17 已不再支持,极少用于手机可以忽略。
使用arm64-v8a架构的手机,运行app时jnilibs会去读取so库,先去arm64-v8a目录找:
如果不存在v8目录,就会去v7目录下找,若v7目录也不存在,就去armeabi目录找;
如果存在v8目录,且此目录下存在对应的so文件,当然就直接使用;
如果存在v8目录,但此目录下没有对应的so文件,会直接抛出异常并停止遍历查找,所以如果添加一些第三方sdk,注意so文件的类型,不要产生不全的文件夹。
ADB命令
常用ADB命令
> adb help //查看adb帮助文档
> adb devices //
> adb get-serialno //获取序列号 同adb devices显示的序列号
> adb reboot //重启安卓设备
> adb kill-server/adb start-server //设备未连接可尝试重启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 dumpsys package #包信息Package Information
> adb shell am start -n com.android.settings/com.android.settings.Settings //打开某个应用的页面
> aapt dump badging apk本机路径 //获取计算机本机(未安装)存储的APK包名
> aapt dump xmltree apk本机路径 AndroidManifest.xml | findstr “package” //获取计算机本机(未安装)存储的APK包名
> adb -s 设备名 install apk本机路径 //计算机连接多个设备,安装应用到指定的设备
> adb install test.apk //安装应用
> adb install -d test.apk //允许安装低版本的应用
> adb install -r test.apk //替换已存在的应用程序,也就是说强制安装
> adb install -s test.apk //安装应用apk到sd卡
> adb install -t test.apk //允许安装的应用是测试包
> adb install -g test.apk //为应用程序授予所有运行时的权限
> adb uninstall <应用包名> //卸载应用
> adb uninstall -k <应用包名> //卸载应用,但保留数据和缓存文件
> adb shell pm list packages //列出手机装的所有app的包名
> adb shell pm list packages -3 //获取所有已安装的第三方应用包名
> adb shell pm path <应用包名> //查看应用apk源文件存储路径
> adb shell pm clear <应用包名> //清除指定应用的数据与缓存
> adb shell am force-stop <应用包名> //强制停止应用
> adb logcat | find "<应用包名>" //抓取指定应用的日志
> adb logcat -c //清除log 缓存
ADB获取应用
- 获取应用包名
1.1 查看安卓设备上所有应用的包名:
adb shell pm list package
1.2 查看安卓设备上当前运行的应用包名
adb shell dumpsys window | findstr mCurrentFocus
1.3 获取当前正在活动的页面activity
adb shell dumpsys activity | findstr “realActivity”
1.4 获取当前窗口显示的页面activity
adb shell dumpsys window | findstr mCurrent - 根据要导出的包名,查看app安装路径
adb shell pm path <应用包名> - 导出应用的安装文件apk到pc端
adb pull <apk路径> <pc路径> - 查看进程号
adb shell ps | findstr <应用包名> //linux环境用grep替换findstr
ADB无线WIFI连接
- 1、将手机和计算机处于同一局域网中,手机连接wifi,同时用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
返回“connected to ip地址:端口号”即为成功
可以同时无线连接多台设备。 - 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