Xinsi's Blog

Move on

Android_bp

Android.bp 理解Android Build系统 前言 Android Build系统是Android源码的一部分,用来编译Android系统,Android SDK以及相关文档。众所周知,Android是一个开源的操作系统,包含着大量的开源项目以及许多模块。不同的生产厂商不同的设备对于Android系统的定制都是不一样的。 如何将这些项目和模块的编译统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能够支持面向不同的硬件设备,不同的编译类型,还要提供面向各个厂商的定制扩展,是非常有难度的。 但是Android Build系统很好的解决了这些问题。 概述 整个Build系统的Make文件可以分为三类: Build系统核心文件 定义了整个Build系统框架,而其他所有的Make文件都是在这个框架的基础上编写出来的。 Android不同版本的build目录: Android6 Android7 Android8 针对某个产品的Make文件 针对某个模块的Make文件 背景 从Android 7.0 (N)开始, Google开始逐步使用Android.bp代替原来的Android.mk进行编译. Google称之为soong, 具体可以参考: soong Makefile AOSP的==android-6.0.1_r9==分支,是最后一个纯Makefile的大版本。随着时间的发展,Android项目越来越庞大,纯Makefile编译系统已经越来越不堪。不仅扩展不便,而且执行效率也不太高。从7.0版本开始,Android已经用Ninja来替代Makefile。 What ? 目前还存在的问题 1.对C/C++代码,如果需要使用宏开关时, 由于android整个编译系统还没完全切换过来, 导致 在项目mk文件定义的开关, 还不能生效. 解决: a.通过export命令, 把相应的开关设置到环境变量, go文件就能读取到了. b.把开关集中放到某一个文件中, 然后在go文件中直接读取这个文件. 2.对于条件编译, 需要添加go文件进行控制.

README

hugo基本操作 hugo创建新的markdown格式文档 进入到新建hugo目录下: chenxinsideMacBook-Pro:site chenxinsi$ hugo new post/README.md 生成的README.md文件将放在content/post文件夹下 发布新建的markdown文档 hugo undraft content/post/README.md hugo生成对应的post/index.html文件 chenxinsideMacBook-Pro:site chenxinsi$ hugo Started building sites ... Built site for language en: 0 of 1 draft rendered 0 future content 0 expired content 5 regular pages created 12 other pages created 0 non-page files copied 1 paginator pages created 1 tags created 1 topics created total in 16 ms 然后进入到public/post目录下,可以看到: chenxinsideMacBook-Pro:post chenxinsi$ ls first index.

Soong

Soong Soong是基于Android构建系统的替代品。它用Android.bp文件替换Android.mk文件,这些文件是类似JSON的简单声明性描述。 Android.bp文件格式 按照设计,Android.bp文件非常简单。没有条件或控制流程语句 - 在Go中编写的构建逻辑中处理任何复杂性。在可能的情况下,Android.bp文件的语法和语义有意与Bazel BUILD文件类似。 Bazel BUILD files连接 模块 Android.bp文件中的模块以模块类型开头,后面是一组name: value,格式的属性: cc_binary { name: "gzip", srcs: ["src/test/minigzip.c"], shared_libs: ["libz"], stl: "none", } 每个模块都必须有一个name属性,并且该值在所有的Android.bp文件中必须是唯一的。 有关有效模块类型及其属性的列表,请参阅 $OUT_DIR/soong/.bootstrap/docs/soong_build.html. 变量 一个Android.bp文件可能包含顶级变量赋值: gzip_srcs = ["src/test/minigzip.c"], cc_binary { name: "gzip", srcs: gzip_srcs, shared_libs: ["libz"], stl: "none", } 变量被限定在声明文件的其余部分,以及任何子蓝图文件中。变量是不可变的,只有一个例外 - 它们可以附加到+ =赋值,但是只有在它们被引用之前。 注释 Android.bp文件可以包含C风格的多行/* */和C ++风格的单行//注释。 类型 变量和属性是强类型的,变量是基于第一个赋值而动态变化的,而属性由模块类型静态地赋值。支持的类型是: * Bool (true or false) * Integers (int) * Strings ("string") * Lists of strings (["string1", "string2"]) * Maps ({key1: "value1", key2: ["value2"]})

Virtualenv

[toc] virtualenv 安装virtualenv pip3 install virtualenv 建立独立运行环境 如果我们开发一个新的项目,需要一套独立的Python运行环境。 one step 创建目录 mdkir myproject cd myproject/ //我的虚拟环境: /Users/chenxinsi/PycharmProjects/python3.x two step 创建一个独立的Python运行环境,命名为venv: virtualenv --no-site-packages venv 命令virtualenv就可以创建一个独立的Python运行环境,我们还加上了参数–no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样我们就得到了“干净”的Python运行环境。 进入新建的Python环境 myproject$ source venv/bin/activate (venv) myproject$ 安装各种第三方包 (venv) myproject$pip install python版本号 退出(venv)Python环境 在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受影响。vnev环境是专门针对myproject这个应用创建的。 退出当前venv环境: (venv) myproject$ deactivate myproject$ 小结 virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。

First

#hugo one two three