为什么使用freeline—-随时可以切换常规全量编译和增量编译
全量编译:重新构建整个app,时间上和默认的as编译是一样的
增量编译:使用freeline的编译方式,时间很快
Freeline支持的增量编译场景
一、 确认python环境,如果没有请自行安装
建议2.7+版本
可以通过 cmd下的 python查看当前python版本号
二、集成Freeline
项目的build.gradle中添加
dependencies {
classpath 'com.antfortune.freeline:gradle:0.8.3'
}
app的build.gradle中添加
apply plugin: 'com.antfortune.freeline'
android {
freeline {
hack true
productFlavor 'dev' //多渠道打包时加入此项
applicationProxy false
}
}
Applincation的 onCreate()中添加
FreelineCore.init(this);
三、初始化 freeline环境
- 打开命令行,cd进入到项目的根目录
- 运行 gradlew initFreeline -Pmirror,会从国内镜像开始初始化freeline环境,期间可能持续几分钟,最终会提示完成
四、安装插件
File->Settings->plugins->搜索Freeline即可,安装后重启,会多两个地方
五、使用
第一次使用freeline的时候,clean下项目,同时清除下原有的安装包
原有的as自带编译正常还能使用
可以点击freeline的小按钮,就是进行freeline的增量编译方式了(其实就是“python freeline.py ”命令的快捷键)
在freeline命令窗口
- python freeline.py -f 强制进行全量编译并安装apk
- python freeline.py 编译并安装apk
注意事项:
1. 第一次编译与没有使用freeline之前的编译时间是一样的,耐心等待就是了。第一次使用全量编译(python freeline.py -f),但在全量编译前最好clean一下(gradlew clean),以后的编译使用python freeline.py就行了。
2. 如果设备上安装的不是使用freeline编译打包的程序,请先卸载,否则会无法安装。ps:后续使用freeline编译打包安装完,可能不会自动打开应用程序。
3. 不支持删除res/values资源,否则可能导致 aapt 编译出错。
4. 不支持Kotlin/Groovy/Scala语言
六、常见问题
1.Python版本问题
目前支持python2.0版本,不支持3.0版本。python2.7.2下载地
址:https://www.python.org/downloads/。
2.productFlavors问题
在主Module的build.gradle中配置productFlavors,例如:
productFlavors {
appstore {
applicationId 'your package name'
}
}
freeline {
hack true
productFlavor 'appstore'
applicationProxy false
}
3.could not find class……问题
在Application类中的onCreate()方法中添加FreelineCore.init(this)方法。
public class YourApplication extends Application {
public onCreate() {
super.onCreate();
FreelineCore.init(this);
}
}
5.install apk to device failed
换成系统5.0以上的设备
6.连接不到设备
官方github上的解答:
-[问题排查] Freeline “try to connect device/ connect_device_task failed.” #152
排查方法如下(建议配合使用Python freeline.py -d):
1.确定FreelineCore.init(this);加入到Application类中,且在onCreate()下的第一行,不要根据是否在主进程做特殊处理,否则可能导致FreelineService无法正常启动;[Freeline 0.7.0+开始,默认开启了Application替换,这条可以不用检查]
2.确定FreelineService以及freeline相关组件是否正常merge到最终的minifest中,最终的manifest路径在${module}/build/intermediates/manifests中;
3.确定python freeline.py -v与定义在build.gradle中的freeline的版本是否一致;
4.确定是否刚刚执行了清空app数据的操作,freeline缓存数据在/data/data路径,清空app数据也会导致连接不上的问题(执行freeline命令时,通常会有句明显的日志反复出现:server result is -1);
5.确定是否开启了网络代理导致127.0.0.1被重定向?
* 6.一定要先使用freeline来打全量包,再来进行增量,否则也会出现这个问题。即,freeline的全量编译与Android-studio自带的RUN会存在冲突。*
当上述问题都无法解决时,有个终极的解决方案就是重启试试…不少人通过重启顺利解决连接不上的问题。。。
后续会通过自动化的方式,尽量避免手工排查上述问题。有遇见相关的问题可以具体描述一下,在issue中进行回复,可以帮忙排查。
连接不到设备,重点排查第5,6步骤。另外还需在AndroidManifest文件中添加:
<application
android:debuggable="true"
>
7. [generate_file_stat_task] generate_file_stat_task finish in 0.2s 一直停在这里就不动了
gradlew 用这个命令 自动下载下gradle
8. public symbol drawable/xxxx_1 declared here is not defined
[兼容性问题] 使用 animated-vector 或者 design-support 25.1.+ 遇见 public symbol drawable/xxxx_1 declared here is not defined
- 降级或者 exclude
extraResourceDependencyPaths
参看: