Kivy a to z -- Kivy的编译过程-distribute.sh脚本分析

1 这一节重点来分析一下distribute.sh,以此来了解一下Kivy的整个编译过程

2 在上一篇文章中,我们讲到编译的方法:

./distribute.sh -m 'openssl pyjnius pil kivy'

3 那整个过程是怎么进行的,下面来分析一下:

4 首先来看下这个脚本文件的最后一行脚本:run

function run() {

  check_build_deps

  run_prepare

  run_source_modules

  run_get_packages

  run_prebuild

  run_build

  run_biglink

  run_postbuild

  run_pymodules_install

  run_distribute

  info "All done !"

}


 

刚好是十个函数,这十个函数到底各自做了什么呢,一直来分析一下:

5 check_build_deps

该函数用于检测编译所依赖的软件包是否存在:build-essential zlib1g-dev cython

 

6 run_prepare

检测NDK,SDK是否已经安装,环境变量是否已经设置

检测tar bzip2 unzip make gcc g++是否已经安装

检查dist/default是否已经存在,如已经存在,提示是否删除

创建一堆的目录等等

 

7 run_source_modules

该函数的主要作用是根据要编译的模块调用recipes目录下相应的recipes.sh加载相应的环境变量以及编译函数

并且会检查模块的依赖关系,把一些依赖的模块也编译进去,例如要编译openssl pyjnius pil kivy,那么实际会编译的模块包含以下这些:

hostpython jpeg openssl png python pil sdl pygame pyjnius android kivy

 

8 run_get_packages

run_source_modules已经把下载的路径的环境变量给设置好了,接下来就是下载相应的代码并解压了

所有的代码会被下载到.packages目录下,并被解压到build目录下

 

9 run_prebuild

该函数会调用各模块的recipes.sh里的prebuild_xxx以完以一些编译前的初始化工作

prebuild_python就会给Python打上patch

 

10 run_build

这里就开始编译各个模块了

这里要特别注意的是,如果是一个python模块,如pyjnius

build_xxx中,如build_pyjnius

会有下面的脚本:

export LDSHARED="$LIBLINK"

$LIBLINK即为src\tools\liblink,它会在build/objects生成相应的以.so.o结尾的动态库

上演了一场替换大法。

 

11 run_biglink

build\objects目录下的所有.so.o动态库文件链接成一个动态库文件:libpymodules.so

 

12 run_postbuild

该函数会调用各模块的recipes.sh里的postbuild_xxx以完以一些编译前的初始化工作

 

13 run_pymodules_install

将所有的python模块,如jnius,pil,kivypygame安装到python-install\lib\python2.7\site-packages

 

14 再看来最后一个函数:run_distribute

这个函数的作用是把所有需要的文件拷贝到dist/default目录下,为下一步的apk的生成作准备。

 

15 好了,distribute.sh分析完毕了,这个时候应该对kivy的整个模块的编译过程有一个比较完整的认识了

 

16 需要注意的地方有liblink以及biglink,这两个过程在通常的编译过程中都是不会特意这样做的,有点奇怪。

 

17 (完)

 

你可能感兴趣的:(android,python,cython,kivy)