关于freeline:Freeline - Android平台上的秒级编译方案
freeline github地址:https://github.com/alibaba/freeline
使用freeline之后,从30分钟变到了30秒,谢谢阿里的技术。
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);
}
}
4.能够正常编译,但是打开应用程序崩
在主Module的build.gradle中配置freeline :
freeline {
applicationProxy false
}
另外,检查手机是否设置了代理,如果设置了,需要去掉。
在Application类中加入:
public class YourApplication extends Application {
public onCreate() {
super.onCreate();
FreelineCore.init(this);
}
}
5.install apk to device failed
排查方法:
- 换成系统5.0以上的设备
- 删除手机上的应用程序,进行一次全量编译(python freeline.py -f)
- clean项目(gradlew clean),进行全量编译(python freeline.py -f)
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"
>
注意事项
- 第一次编译与没有使用freeline之前的编译时间是一样的,耐心等待就是了。第一次使用全量编译(python freeline.py -f),但在全量编译前最好clean一下(gradlew clean),以后的编译使用python freeline.py就行了。
- 如果设备上安装的不是使用freeline编译打包的程序,请先卸载,否则会无法安装。ps:后续使用freeline编译打包安装完,可能不会自动打开应用程序。
- 不支持删除res/values资源,否则可能导致 aapt 编译出错。
- 不支持Kotlin/Groovy/Scala语言