/<关键字>
:<行号>
dd剪切
yy复制
p粘贴
u撤销
ctrl+r重做
w 保存
wq保存退出
q!退出

find + xargs + grep

1
2
3
find -name Activity.java
find -name '*.java'
find -name '*.java' | xarfs grep 'extends[ \t\n]+ActiviyManagerNative'

1
2
3
4
5
6
7
8
Android.mk
LOCAL_SHARED_LIBRARIES := libutils

#include <utils/Call.Stack.h>

CallStack stack;
stack.update();
stack.log("tag");
1
2
3
4
5
6
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1

/******/
cd external/doclava && mm -B USE_NINJA=false
1
2
3
4
5
6
7
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/unistd.h:733:6: note: 'syscall' has been explicitly marked deprecated here
int syscall(int, ...);
^
1 error generated.
[ 1% 408/31742] host C++: libc++abi <...xternal/libcxxabi/src/cxa_demangle.cpp
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error

去到/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs,发现MacOSX10.11.sdk已经被删除,只剩下MacOSX10.12.sdk,所以首先要去下载10.11的SDK。可以去MacOSX-SDKs下载MacOSX10.11.sdk,解压拷贝到/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs。为了避免下次升级的时候再被删除,可以放到~/Document/MacOSX10.11.sdk,再给它创建一个软链接:

1
$ ln -s ~/Document/MacOSX10.11.sdk /Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
然后确保AOSP源码下build/core/combo/mac_version.mk文件中
mac_sdk_versions_supported := 10.9 10.10 10.11
后面不要写10.12。

1
2
3
4
5
6
7
8
9
Unsupported curl, please use a curl not based on SecureTransport
Jack server installation not found
Unsupported curl, please use a curl not based on SecureTransport
Unsupported curl, please use a curl not based on SecureTransport
[ 4% 842/20846] host C++: dexdump2 <= art/dexdump/dexdump.cc
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1

#### make failed to build some targets (01:37 (mm:ss)) ####

首先下载curl源码,然后执行

1
2
3
./configure --prefix=/usr/local/curl --with-ssl=/usr/local/Cellar/openssl/1.0.2d_1
make
make install

jack-admin kill-server
jack-admin uninstall-server
cd prebuilts/sdk/tools
jack-admin install-server jack-launcher.jar jack-server-4.7.ALPHA.jar

镜像

查看镜像信息

docker images命令可以列出本地主机上已有的镜像

  • PEPOSITORY 仓库
  • TAG 标签信息
  • ID 唯一 ID
  • CREATED 创建时间
  • VIRTUAL SIZE 镜像大下
    docker inspect命令可以获取该奖项的详细信息
    返回一个 JSON 格式的消息,如果只要其中一项内容时,可以使用-f指定参数。
    例如镜像的Architecture信息
1
docker inspect -f {{".Architecture"}} ID

搜寻镜像

使用docker search命令可以搜索远端仓库共享的镜像,默认搜索 Docker Hub

删除镜像

使用docker rmi命令可以删除镜像,命令后可以使标签或 ID

查看所有容器

docker ps -a命令可以看到本机上存在的所有容器

创建镜像

基于已有的镜像的容器创建

docker commit 命令 主要选项包括

  • -a --author="" 作者信息
  • -m --message="" 提交信息
  • -p --pause==true 提交时暂停容器运行
1
docker commit -m "message" -a "author" id name

基于本地模板导入

从一个操作西永模板文件导入一个镜像,推介使用OPENVZ下载模板

1
cat ubuntu-14.04-x86_64-minimal.tar.gz | docler import - ubuntu:14.04

存出和载入镜像

存入镜像

使用docker save命令

1
docker save -o ubuntu_14.tar unbuntu:14.04

载入镜像

1
docker load --input unbuntu_14.tar

上传镜像

doker push 命令可以上传镜像到仓库,默认上传到 DockerHub 上

1
2
docker tag test:latest user/test:latest
docker push user/test:latest

容器

容器是镜像的一个运行实例,带有额外可写的文件层 ##创建容器
docker create新建一个停止状态的容器,可以使用docker start命令启动它

新建并启动容器

docker run

使用特权

–privileged

使用 Dokerfile 创建镜像

Docker 可以使用文本文件 Dockerfile 来描述镜像从而创建镜像

基本结构

Dockerfile 由命令语句组成,支持#开头的注释
一般而言,Dockerfile 分为四部分:基础信息、维护者信息、镜像操作指令和容器启动时执行指令

1
2
3
4
5
6
7
8
9
# 第一行必须是指定基础镜像
FROM ubuntu
# 维护者信息
MAINTAINER user user@email.com
# 镜像指令
RUN echo "test message" >> /etc/test.txt
RUN apt-get update && apt-get install -y nginx
# 容器启动时执行指令
CMD /usr/sbin/nginx

指令

1.FROM

FROM :
指定基础镜像

2.MAINTAINER

MAINTAINER 指定维护者信息

3.RUN

RUN

RUN echo “root:Docker!” | chpasswd

必需的软件

Homebrew

Mac系统的包管理器

1
ruby -e -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Node

1
brew install node

react-native-cli

1
npm install -g react-native-cli

非必需软件

Watchman

监视文件系统变更的工具

1
brew install watchman

Flow

静态的JS类型检查工具

1
brew install flow

测试

1
2
3
react-native init FirstProject
cd FirstProject
react-native run-ios

ABI

ABI(Application Binary Interface)应用二进制借口,定义了 CPU 能够执行的二进制文件的格式规范。
Android 支持的 CPU 架构众多,ABI 包括armeabiarmeabi-v7aarm64-v8ax86x86_64mipsmips64

https://developer.android.com/ndk/guides/abis.html#sa

so (shared object)是机器可以直接运行的二进制代码,买个 App 的 so 被打包在 apk 文件的lib/目录下

1
2
3
4
5
6
7
8
9
10
lib
|
├── armeabi
│ └── libmath.so
├── armeabi-v7a
│ └── libmath.so
├── mips
│ └── libmath.so
└── x86
└── libmath.so

使用下面命令可以查看 apk 支持的 abi

1
appt dump bading app.apk | grep abi

制定 ABI 生产 so

Application.mk文件中指定APP_ABI参数

Android 系统的 ABI 支持

  • primary ABI 当前系统使用的 ABI
  • secondary ABI 当前系统支持的其他 ABI
    一般情况手机不止支持一个 ABI

查看 ABI

  • /system/build.prop中制定了支持的 ABI 类型,可以在 adb shell 中查看
1
getprop | grep abilist
  • 使用Build.BUPPORTED_ABIS可以获取当前设备支持的 ABI 列表
1
Build.SUPPORTED_ABIS;

在 apk 安装过程时,Package Manager 会扫描整个 apk 寻找符合下面文件路径格式动态链接库

1
lib/<primary-abi>/lib<name>.so

primary-abi是上面表中的 abi 的值,name对应的是Android.mk中定义的LOCAL_MODULE的值
如果没有当前primary-abi的 so,Package Manager 会尝试寻找合适secondary-abi的 so 文件

1
lib/<secondary-abi>/lib<name>.so

有合适的 so 文件后,包管理会在改 ABI 文件下的所有 so 库全部拷贝到应用的 data 目录下data/data/<package_name>/lib/

在代码调用 so 时,如果 ABI 文件夹下没有提供 so 文件,运行时会遇到java.lang.UnsatisfiedLinkError

加载 so

System.loadLibrary之传入Android.mk中定义的LOCAL_MODULE的值
System.load这个方法可以动态的加载非 apk 内置的 so,甚至动态下载的 so,但是不能加载 SD 卡中的 so

1
System.load("/data/data/<package-name/dir/libmath.so")

Android Build系统是Android源码的一部分,用来编译Android系统、Android SDK和相关文档。
主要有Make文件、Shell脚本以及Python脚本组成,其中最主要的是Make文件。

Read More

Camera RAW

#预处理

  1. 准确的色彩还原
    用吸色找中性灰
  2. 正确的黑白场
    按住option调整黑白,主体黑色不能纯黑,主体不能发白
  3. 足够的清晰度
    加清晰度需要减曝光
    option调整蒙版,之后锐化
  4. 适当的饱和度
    自然饱和度 若隐若现的颜色
    饱和度 已经出现的颜色
  5. 丰富合理的层次
    讲直方图的信息展开

#二次构图
先做相机、镜头矫正

删除色差

#输出

  • TIFF印刷,色彩空间Adobe RGB,色彩深度16位

    相机用Adobe RGB

  • 网络输出
    JPEG 删除信息 品质选双数
    色彩空间sRGB 色彩深度8位 大小1500-2000
    可以使用PS-脚本-图像处理器批量处理