一些很不错的Android开发技巧,这个项目翻译自 android-tips-tricks 去掉了一些我认为不重要的,对我使用过的东东做了评价,同时翻译了一些自己没有注意到的知识点的文章。
了解你的工具
Android Studio
完整的快捷键指南 : MacOSX | Linux/Win
快捷键提示插件 — 试用了一下,就是你点击的时候有些按钮会出来提示框告诉你这个的快捷键是什么以及你使用的次数,还不错,目的就是让你进行键盘流操作。
提供 Action 转换大小写什么的,感觉想不起来用。
Add Sort Lines action in Edit menu to sort selected lines or whole file if selection is empty.
静态代码审查工具
也是个代码审查工具,检查可能出现的bug
代码风格管理的插件
增加了例如卸载,重启App的功能
这个玩意挺NB的输入个大概就能帮你写代码。其中的bind view 挺好用的。
Dagger的可视化辅助工具
可以调试JVM的一些细节,讲真我用的不多
Comprehensive list of all Live Templates in Android Studio 这个库有很多的自定义模版
newInstance
– 在Fragment中生成 newInstance
方法Toast
– 生成 Toast.makeText(context, "", Toast.LENGTH_SHORT).show();
fbc
– 生成 findViewByIdconst
– 定义一个 android style int 常量logd
– 生成 Log.d(TAG, "");
logm
– Log 当前方法名称和参数logr
– Log 当前方法结果logt
– 当前类生成 log tagpsf
– public static finalsout
– 打印一个字符串到 System.outsoutm
– 打印当前类名和方法到 System.outsoutp
– 打印方法参数和返回值到 System.outvisible
– 设置 view VISIBLEgone
– 设置 view GONEnoInstance
– private 构造方法Android Studio/IntelliJ 可以帮你自动完成一些代码
完整的转换列表参见 Settings → Editor → Postfix Templates
<expr>.null
转换成 if(<expr> == null)
<expr>.notnull
转换成 if(<expr> != null)
<expr>.var
转换成 T name = <expr>
<expr>.field
会自动生成一个全局变量 field = <expr>
<ArrayExpr>.for
转换成 for(T item : <Arrayexpr>)
<ArrayExpr>.fori
转换成 for(int i = 0; i < <Arrayexpr>.length; i++)
<ArrayExpr>.forr
转换成 for(int i = <Arrayexpr>.length - 1; i > 0 ; i--)
虽然是个人爱好,反正我觉得使用白色主题好瞎眼啊
给你的 Android Studio 选择一个合适的字体,作者推荐使用Menlo font 反正我觉得mac的字体就挺好的,在linux上开发已经觉得不顺眼了.
你应该使用一个标准的编码风格,它可以是:
表示在编码风格这一块自己确实有待规范^^
这个可以看下,文章提到的我是早就配置过了
简单说就是显示你连上的真机,也就在你做演示的时候有些用处,而且我一连上手机就自己跳出来,各位自己使用评价吧!
不但能展示还可以控制你的Android设备.免费版本 可以使用电脑鼠标, 收费版本 可以使用电脑键盘. 你可以手不离开键盘进行测试.
HttpUrlConnect 有一些bug quite some bugs. Okhttp 优雅的解决了他们. [Reference Link]
aar
[Stackoverflow Ref] dependencies {
compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
}
repositories{
flatDir{
dirs 'libs'
}
}
这个不错,不过我没找到一个命令参数表,就只关注我想要关注的 log
可以分析Android Apk很不错
Facebook 出品,非常不错的工具,可以在 Chrome 中看到网络请求,调试数据库和SharePreference,和 Okhttp搭配使用更好,我配合urlconnection使用不生效,原因不明。
使用”bugreport”分析耗电
版本依赖时候避免使用 +
这篇文章可以看一下,作者说在一些设备上 Timer 不工作但是原因不明,作者说的使用 Handler 替代 Timer 确实是对的,我们商店有一段时间anr很多,后来发现和Timer相关。
如果你 确实 要用png, 可以使用 TinyPNG 压缩.
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
android {
...
buildTypes {
release {
shrinkResources true
minifyEnabled true
...
}
}
}
shrinkResources 是把你没用到的文件用一个很小的文件替换,我觉得要是你发现了那个文件确实没啥用,你还是删除了吧。
adb shell am kill
译文见降低 gradle 内存又加快构建
Gradle memory >= Dex memory + 1Gb
defaultConfig {
...
ndk {
abiFilters "armeabi", "armeabi-v7a", "mips", "x86"
}
}
//Split into platform dependent APK
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'mips', 'x86' //select ABIs to build APKs for
universalApk false //generate an additional APK that contains all the ABIs
}
}
// map for the version code
project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'mips': 5, 'x86': 8]
// Rename with proper versioning
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
output.versionCodeOverride =
project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) *
1000000 +
android.defaultConfig.versionCode
}
}
./gradlew --refresh-dependencies
下面的例子是跳过 javaDoc
这个任务
./gradlew clean build -x javaDoc
settings.gradle 中设置
rootProject.children.each{ it.buildFileName = it.name + '.gradle'}
更多的Gradle技巧
DRY = Do not Repeat Yourself
一开始我们也是按照层去分包的,很坑爹。按照功能分可能你不是很好区分在哪个功能中,不过也比你按照层区分要好找很多。
有利于你学习解决一些依赖冲突. 官方参考
android {
buildTypes {
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
release {
// ...
}
}
}
@android:color/transparent
Android使用Gradle构建,这实际上可以很容易做些自动化的东西。实用的 Gradle 脚本
这个命令我测试了,不好使啊!直接改wrapper里面引用就行。
执行下面的代码升级你的 gradle wrapper
./gradlew wrapper --gradle-version 3.3 --distribution-type all
gradle.properties
如下设置
android.enableBuildCache=true
./gradlew -stop
全局gradle.properties
如下设置
android.builder.sdkDownload=true
实验性功能 [Bug Ref]
jcenter()
和 mavenCentral()
不用同时依赖`JCenter 是 MavenCentral 的超集. [参考]
~/.gradle/caches/
删除 cache
文件夹以下的 Aliases 可以被添加到 ~/.bashrc
或者 ~/.zshrc
,看起来不错
Alias | Usage |
---|---|
alias screenshot="adb exec-out
|
screenshot |
`alias startintent=”adb devices | tail -n +2 |
`alias apkinstall=”adb devices | tail -n +2 |
`alias rmapp=”adb devices | tail -n +2 |
`alias clearapp=”adb devices | tail -n +2 |
//STOPSHIP
时候编译失败 [Ref Link]
启用这个功能 //STOPSHIP
失败功能, build.gradle
如下设置
android {
...
lintOptions {
abortOnError true
fatal 'StopShip'
}
}
//STOPSHIP
注释也会导致编译失败。
在 Android Studio
Preferences
>Editor
>Code Style
>Inspections
, 可以控制这个功能
adb install -g
安装并授予manifest中的全部权限 [More Info]alfi
查找一个库的依赖Gradle, Please 的命令行版本.
+ 执行
bash
alfi name_of_library
+ 复制结果
+ 粘贴到 build.gradle
dryrun
直接测试一个库
dryrun REMOTE_GIT_URL
表示还得下各种gradle版本,也就那么回事,不见得多快。
控制台输出单元测试结果小技巧.
android {
...
testOptions.unitTests.all {
testLogging {
events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
outputs.upToDateWhen { false }
showStandardStreams = true
}
}
}
--offline
总是从cache运行, 离线模式不会访问网络.没有缓存会编译失败.
./gradlew assembleDevelopDebug --offline
./gradlew test --offline
译文自动初始化你的库
"android:extractNativeLibs:false"
在 <application>
减小包体积 [Ref Link]这个属性是6.0开始的属性,告诉系统你不用把apk解压缩出来了,但是so不能被压缩,so 需要zipalign对齐,这个步骤不是自动的,我觉得慎用。
?attr/selectableItemBackground
替代 ?android:attr
(Ref)android:background="?attr/selectableItemBackground"
实现可溢出的水波纹: (Ref)
?attr/selectableItemBackgroundBorderless
Java 转 Kotlin 的 Cheatsheet.
这两个最为著名。
Android 专家的采访短视频。
有关于各种主题的完整的 Android 资源,并且实时更新。
[Android Arsenal](https://android-arsenal.com/) - 和 Android 开发者相关的工具、库、app
Android开发视频