安卓的变体
1、Android studio 默认配置
在断点调试之前首先要明白安卓变体的概念,安卓工程默认有两个变体debug、release,release可在app/build.gradle文件中发现:
android {
buildTypes {
//release 变体
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
2、debug变体包解密
其实AndroidStudio默认为我们配置了一个debug变体,完整的写法是这样的:
android {
// 签名信息
signingConfigs {
// debug变体使用的这个签名,debug变体下,安卓studio默认使用这个签名信息。
// 注意.android文件是隐藏文件,想要找打它需要mac把显示隐藏文件的功能开启。
debug {
storeFile file("/Users/zennioptical/.android/debug.keystore")
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
//release变体
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
// debug变体,安卓studio默认有这个配置。
debug {
minifyEnabled false
signingConfig signingConfigs.debug
}
}
}
平时我们直接点 run app 就把debug app 安装到了手机上,其实他背后还是做了一些事情的:
(1)首先这里AndroidStudio默认配置了打包时打debug变体包:
(2)接着AndroidStudio 通过debug变体里面 signingConfigs.debug寻找 名字叫debug的签名相关信息
(3)最后所有验证通过后打个debug签名包。
2、release变体包解密
刚接触安卓时我们或许不写gradle配置,直接通过AS窗口提供的功能就打个release包:
那么问题来了,我把这里的debug 变体类型改为release不就可以直接跑release包到手机了吗?
现实很残酷,当我们选择release变体,然后去run app时 又提示没有配置签名信息,其实很好理解缺少下面这玩意
当我们配置了这个后又进了一个坑 😂
很好理解 😂 没有release.keystore 文件,解决方案很简单,按照我们传统打包方式生成个就ojbk喽:
这样后续想直接往手机上跑release包时,变体改为release,然后直接run即可。
3、变体拓展
其实变体名以及变体的签名信息名都是可随意起的:
android {
signingConfigs {
release {
storeFile file('/Users/zennioptical/MyProject/NoteDebug/release.keystore')
storePassword 'release'
keyAlias 'release'
keyPassword 'release'
}
debug {
storeFile file("/Users/zennioptical/.android/debug.keystore")
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
// 签名信息名,随便取
qasigningConfigInfo{
storeFile file("/Users/zennioptical/.android/debug.keystore")
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
signingConfig signingConfigs.debug
}
// 变体名随便取
qa{
minifyEnabled false
//指定使用哪个签名信息
signingConfig signingConfigs.qasigningConfigInfo
}
}
}
好了花了点力气把打包相关的梳理了下,为啥说这个呢?因为断点调试需要了解下这相关信息。上面也当我们回顾温习吧~
启用断点调试
如下图只需要简单三步就把断点调试功能搞出来了
但是其背后还是有很多注意点的,我们之前可能不太留意。想要开启断点调试需要做如下步骤:
1、设备启用调试功能
- 对于Android模拟器默认开启了这个功能
- 对于真机需要去开发者选项中主动开启这个功能
2、给变体开启debug调试
android {
buildTypes {
customDebugType {
//开启断点调试
debuggable true
...
}
}
}
注意:AS默认为每个项目配置了debug变体,且默认开启这个功能。当我们配置了新的变体时如release、qa,必须手动开启这个功能,否则不能进行断点调试。
可想而知原来我们经常在debug下进行了断点调试,其背后还是有些东西的~
使用断点
断点调试主要是掌握下断点调试的几个按钮功能,然后会对当前执行的表达式求值就基本差不多了。
(1)Step over
执行到下一行代码。注意是从当前断点行往下执行一行。
(2)Step Into
进入方法(自定的方法,非系统api)
(3)Force Step Into
进入方法(自定义的、系统源码方法都可进入)
(4)Step out
跳出方法
(5)Run to Cursor
快速进入当前代码执行的地方,多用于循环
(6)Evaluate Expression
对变量进行表达式运算。如下计算变量a+1的值。
The end
掌握这些 基本能胜任基本的调试工作了