Android项目快速编译之Freeline-Android的配置与集成

来源:互联网 发布:网络品牌到期续费通知 编辑:程序博客网 时间:2024/06/06 05:38

蚂蚁金服旗下开发的Freeline,在使用中遇到的一些问题 。做如下整理,希望对大家有帮助

开源地址: 
https://github.com/alibaba/freeline 


相关原理介绍: 
https://yq.aliyun.com/articles/59122?spm=5176.8091938.0.0.1Bw3mU


接下来我们就开始集成Freeline到项目中去,主要讲一下我在配置的过程中遇到的问题。

首先,Freeline是采用Python编写的,所以我们需要安装python环境,根据网上的说法,最好使用python2.7版本(有人使用python3.5无法成功集成)。

 
在python环境安装成功后,我们就可以着手在项目中集成Freeline了。根据在github中给出的配置的过程,我们先做一下几件事。

Freeline 初始化环境: 

根目录下的 build.gradle(工程级别的build.gradle文件)

buildscript {     repositories {         jcenter()     }     dependencies {         classpath 'com.antfortune.freeline:gradle:0.8.5'     } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

项目下面的 build.gradle(Module级别的build.gradle文件)

apply plugin: 'com.antfortune.freeline' android {     ...     freeline {         hack true     } } dependencies {   compile 'com.antfortune.freeline:runtime:0.8.5' }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

自定义的 Application

public class App extends Application {     @Override     public void onCreate() {         super.onCreate();         FreelineCore.init(this);     } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

执行完这些步骤以后,接下在命令行(或者AS的终端)中执行以下命令: 

Windows: gradlew.bat initFreeline -Pmirror
Linux/Mac: ./gradlew initFreeline -Pmirror

初始化成功后,执行第一条python命令

python freeline.py

第一次编译时全量编译比较慢,第二次就是毫秒级别的了


至此,Freeline已经成功的集成到了我们的项目中,如果觉得每次执行命令行比较繁琐,可以在AS中安装Freeline的插件


File->Settings->plugins->搜索Freeline即可 
这里写图片描述

这里写图片描述 
安装后就可以在项目中直接点击相应的图标使用,其实也是执行python freeline.py这条命令。

  在Android Studio中,通过以下路径File → Settings → Plugins → Browse repositories,搜索“freeline”,并安装。
  安装完之后需要重启Android Studio。
  这时候会有以下图标
  
 4、点击这个按钮,第一次点击会自动进行gradle的配置,但是不会自动build。需要自己手动进行,如果不是的话也会有相应提示,仔细找会找到的,操作很简单。

 5、看Android Studio的底部,你会看到以下图标
   
   打开Freeline的窗口,跟Terminal的窗口差不多,然后执行 gradlew -initFreeline , 如果Freeline的命令窗口执行不了,可以在Terminal的窗口执行也可以,当然也可以在cmd里面执行,只不过要切换到项目目录里面去执行... 这个操作会下载相应的文件,如果比较慢或者无法下载那么就要使用vpn了
 6、然后再次点击Freeline的插件按钮,默认执行 python freeline.py 也可以手动输入命令进行编译,编译完后会自动安装到手机上或者模拟器上。



上面就是安装流程了,下面说下遇见的错误,首先:

1、使用Freeline编译不能使用

     shrinkResources true 
     minifyEnabled true
     两个命令,所以这两个命令要去除掉
2、如果项目的gradle中使用了 productFlavors 命令,则要配置
     android{
                 freelin{
      hack true
              productFlavor "your Flavor's name"
  }
     }
3、如果使用Freeline过程中出现了使用过时的api或者其他警告,可以使用一下配置
     
android {          lintOptions {                  abortOnError false        }}4、
还有其他一些Freeline相关命令:
python freeline.py -f全部编译,增量编译python freeline.py  
改变编译
python freeline.py -v查看版本号
gradlew -initFreeline 
给该项目下载相关Freeline文件
gradlew initFreeline -Pmirror
使用镜像给该项目下载相关Freeline文件


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    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.could not find class……问题

在Application类中的onCreate()方法中添加FreelineCore.init(this)方法。

public class YourApplication extends Application {    public onCreate() {         super.onCreate();         FreelineCore.init(this);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.能够正常编译,但是打开应用程序崩

在主Module的build.gradle中配置freeline :

freeline {    applicationProxy false}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

在Application类中加入:

public class YourApplication extends Application {    public onCreate() {         super.onCreate();         FreelineCore.init(this);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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"                                >
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意事项

  • 第一次编译与没有使用freeline之前的编译时间是一样的,耐心等待就是了。第一次使用全量编译(python freeline.py -f),但在全量编译前最好clean一下(gradlew clean),以后的编译使用python freeline.py就行了。
  • 如果设备上安装的不是使用freeline编译打包的程序,请先卸载,否则会无法安装。ps:后续使用freeline编译打包安装完,可能不会自动打开应用程序。
  • 不支持删除res/values资源,否则可能导致 aapt 编译出错。
  • 不支持Kotlin/Groovy/Scala语言


其他参考链接: http://www.qingpingshan.com/rjbc/az/182819.html
1 0
原创粉丝点击