- Android Studio 和 Android Gradle 插件的已知问题
- 配置 Android Studio
- Android Studio 环境变量
- Android Gradle 插件版本说明
- Gradle for Android Developers - Getting the most of it
刷机教程
- 安卓自定义ROM镜像
- how-to-install-custom-rom
- adb_fastboot_guide.html
- 三星专用Odin刷机
- Beginner’s guide to installing LineageOS on your Android device
常规错误
1 | dl.google.com:443 failed to respond |
- 上面错误,主要是目标文件不可以访问,原因有:在整个的
repositories
内找不到对应版本的目标文件,或者是网络无法访问到目标服务器.
Android-studio 3.1 error: style attribute ‘android:attr/keyboardNavigationCluster’ not found.
1 | error: style attribute 'android:attr/keyboardNavigationCluster' not found. |
解决方案
- 修改app下的 build.gradle
- 把dependences 里改成
implementation 'com.android.support:appcompat-v7:27.1.0'
- 同时修改成compileSdkVersion 26,targetSdkVersion 26,要大于等于26的版本.
1 | android { |
吐血的Gradle sync failed.
Tip: How to reuse Gradle daemon between Android Studio and terminal
打开Android工程时,它就自动
Gradle sync started
,在下方Sync
终端不断显示如下信息:
1 | [...] |
- 并且使用的内存一直不断上升,它不会因为使用内存过多而被内核
Kill
掉,内存用完之后就是使用硬盘Swap
,直接卡死,如果恢复响应后,在Event log
里必然显示下面信息:
1 | Gradle sync failed: The first result from the daemon was empty. Most likely the process died immediately after connection |
Gradle
同步失败:管道无效,问题在于,Gradle
守护进程会尝试使用IPv4
而非IPv6
.下面是我的一个取巧的方法.
Android Studio
打开工程时,它就自动Gradle Build
时,在终端里用下面命令Kill
掉.
1 | ~$ which jps |
- 通过终端去到工程目录下,使用
gradlew build
.
1 | ~$ ./gradlew build |
- 如果在终端运行上面的命令,还是出现如下的错误, 是与
IDE
里的端终显示同一类的错误.
1 | Starting a Gradle Daemon (subsequent builds will be faster) |
- 现在来记录解决这个问题步骤,代理肯定是配置的,最优先配置使用工程目录下的
gradle.properties
,其次用户目录也有一个同名文件:
1 | ~$ ls ~/.gradle |
- 根据上面终端提示
use --status for details
,可以打开~/.gradle/daemon/<gradle version>/daemon-xxx-out.log
查看细节,如果里面包含如下行:
1 | [...] |
- 并且,如果本机系统有开启
IPv6
,上面的无法连接可能是Gradle
同步失败:管道无效,问题在于,Gradle
守护进程会尝试使用IPv4
而非IPv6
.设置Shell
环境变量:export _JAVA_OPTIONS="-Djava.net.preferIPv6Addresses=true"
再运行./gradlew assembleRelease
尝试.gradle
用户配置如下:
1 | ~$ cat ~/.gradle/gradle.properties |
- 把工程里的
gradle/wrapper/gradle-wrapper.properties
里的distributionUrl
可以指成网络位置,也可以指定本地位置,如:distributionUrl=file\:///home/fullpath/sdkman/archives/gradle-6.4.1.zip
. 如果是指定了本地的位置后,在File -> Project Structure -> Project --> Gradle Version
就会是空,这里就保持为空,不要选择,如果选择了一项,它就会重写distributionUrl
为官网的网络位置, 同时要确保指向本地位置版本的Gradle
要与Bash Shell
内指定是同一个版本.Gradle
的版本兼容性,参考Android Gradle plugin release notes - 还有一个问题是,设置
Android-Studio
与graldew
使用同一个gradle
实例,可以参考这里. - 解决方法 2:在
Android Studio
的vmoptions
文件中,将-Djava.net.preferIPv6Addresses=true
行更改为-Djava.net.preferIPv6Addresses=true
. - 最终该问题在
Android Studio 3.6.3
版本中配置Gradle Plugin 3.6.3
与Gradle 5.6.4
,并通过Ctrl+Alt+S --> Build,Execution,Deployment --> Gradle
把Use Gradle from
设置成Specified location
选择本地的SDKMAN
安装目录的下gradle/5.6.4
,上述设置后,再把所有的(工程|用户)gradle.properties
加上这一行:org.gradle.jvmargs=-Djava.net.preferIPv6Addresses=true -Djava.net.preferIPv6Stack=true
, 先在Bash shell
运行一次./gradlew build
后,再去到IDE时好像同步文件就正常了.
1 | Build #AI-192.7142.36.36.6392135, built on April 14, 2020 |
- 最终确定可能是系统里设置了
iptables -t nat -A POSTROUTING -j MASQUERADE
造成的,参考这里 - 命令行(bash)里使用
./gradlew build
可以正常编译,在android studio
里还是问题如故,因为命令行里读到了环境变量export _JAVA_OPTIONS="-Djava.net.preferIPv6Addresses=true"
. 因此需要修改android studio
的启动脚本,它本身就是用脚本android-studio/studio.sh
启动,在该脚本里添加上述的变量,就能正常使用了。
Android系统源码AOSP 下载.
同步源码
配置环境
1 | ~$ mkdir ~/bin |
下载源码
1 | ~$ mkdir Android-AOSP && cd Android-AOSP |
- 如果不能同步上面的官方源需要使用代理.也可以使用国内一些大学的镜像源:清华大学开源软件镜像站,中国科学技术大学.可以一开始就使用国内镜像源,也可以把原来官方源地址替换成国内镜像源再同步,方法如下:
1 | ~$ cat .repo/manifests.git/config |
- 我最终是改成清华大学镜像同步完成.2020-03-16同步完成后,目录体积显示是93G.后来对比了官方
https://android.googlesource.com/device/
与本地device
目录,好像少了一些设备目录,比如:htc,samsung
是没有看到的.
验证Git标记
- 输入
gpg --import
后粘贴下面的PGP密钥数据.
1 | ~$ gpg --import |
- 测试验证tag
1 | ~$ cd device/generic/mini-emulator-arm64 |
Android Material组件
- Link
Android图标资源
参考链接:
之前开发时,还去不同网站上去下载图标下来,放到
app/src/main/res/drawable
或者是``app/src/main/res/icons内,其实使用[Image Asset Studio](https://developer.android.com/studio/write/image-asset-studio)是最方便的.它可以满足各种类型的图标创建,包括自适应图标.还可以使用[Android-Iconics](https://github.com/mikepenz/Android-Iconics),它集成多个图标资源在一起,比如:
FontAwesome`.
导入PNG图标
- 在
Project
窗口中,选择Android
视图,右键点击res
文件夹,然后依次选择New > Image Asset
.Icon Type
可以选:启动器图标,操作栏和标签页图标,通知图标. - 选中
Asset Type
是Clip Art
时,点击下方的Clip Art
就会弹出一个内置的图标列表,选择一个图标编辑后,按完成就会提示,保存到app/src/main/res/drawable
下面. - 选中
Asset Type
是Image
时,下面的Path
可以选择一个本地位置的PNG文件,可以先把material-design-icons同步下来,再通过该步骤编辑导入到工程去. - 也可以手动复制自定义的PNG文件放到工程里的
app/src/main/res/drawable
.
导入SVG图标
- 在
Project
窗口中,选择Android
视图,右键点击res
文件夹,然后依次选择New > Vector Asset
. - 选中
Asset Type
是Clip Art
时,点击下方的Clip Art
就会弹出一个内置的图标列表,选择一个图标编辑后,按完成就会提示,保存到app/src/main/res/drawable
下面. - 选中
Asset Type
是Local file(SVG,PSD)
时,下面的Path
可以选择一个本地位置的矢量文件,可以先把material-design-icons同步下来,再通过该步骤编辑导入到工程去. - 也可以手动复制自定义的SVG文件放到工程里的
app/src/main/res/drawable
.
使用Android Material Design Icon Generator
插件
安装完成
Android Material Design Icon Generator
后,打开File -> New -> Material Design Icon
.
谢谢支持
- 微信二维码:
- 联系作者