##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-脚本-图像处理器批量处理

在iOS当中,所有的视图都从UIView的基类派生二来,UIView 可以处理触摸时间,可以支持基于Core Graphics绘图,可以做旋转或者缩放。

Read More