杂记 后面要分开

第一步:执行source build/envsetip.sh
引入build/envsetup.sh脚本,该脚本的作用是初始化编译环境,并引入一些辅助的Shell函数,还引入了一些其他常用函数
在这里插入图片描述
第二步:lunch xxx-yyy
调用lunch函数,并指定参数
lunch函数的参数用来指定此次编译的目标设备以及编译类型。xxx是Android源码中已经定义好的一种产品,yyy是编译类型会影响最终系统中包含的模块

第三步:make
第二步和第三步可以合在一起是 makePRODUCT-XXX-YYY,如makePRODUCT-full-eng

LOCAL_MODULE_TAGS := optional
可选:
user:指该模块只在user版本下编译
eng:指该模块只在eng版本下编译
debug:指该模块只在userdebug版本下编译
tests:指该模块只在tests版本下编译
optional:指该模块在所有版本下都编译

LOCAL_PATH:= $(call my-dir)  //相对路径,必须在所有编译模块之前
include $(CLEAR_VARS)   //开始,清除变量
LOCAL_SRC_FILES := acp.c     //本模块编译使用的源码
LOCAL_STATIC_LIBRARIES := libhost libchenan //本模块需要链接的静态库
LOCAL_C_INCLUDES := build/libs/host/include  //引用的include文件 
LOCAL_MODULE := acp  //本模块的模块名 
LOCAL_ACP_UNAVAILABLE := true  //是否支持acp
include $(BUILD_HOST_EXECUTABLE) //结束 编译目标

在这里插入图片描述

LOCAL_STATIC_LIBRARIES
LOCAL_STATIC_LIBRARIES := libhost,也就是描述了要编译本模块,必须已经先编译了libhost.a静态库。

1.还未提交的修改
命令 :git diff > commit.patch
3.已经add但是未commit的修改
命令 :git diff --cached > commit.patch
4.检查patch是否可以应用
命令 :git apply --check commit.patch
5.打补丁
命令 :git apply commit.patch

git clean -f //不会递归删除
git clean -f -d //会递归删除
git clean -f -d -i //交互性删除
git clean -d -f -x //.gitignore中设置的ignore掉的文件也会删除

stash 只会操作被git追踪的文件,要先add再备份
git stash 进行备份.
git stash pop 进行还原
git stash list 查看备份列表
git stash show “stash@{0}” -p > changes1.patch //抉择某一个 git stash 的备份为 patch 文件.
git stash drop [名] 删除单个缓存
git stash clear 全清

linux中 vi / vim显示行号或取消行号命令

  1. 显示行号
    :set nu
  2. 取消行号显示
    :set nu!
  3. 每次打开都显示行号
    修改vi ~/.vimrc 文件,添加:set number

约束布局ConstraintLayout 布局详解
简介

约束布局ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。

优点
复杂的UI绘制视图所需的时间和功耗多,ConstraintLayout使用起来比RelativeLayout更灵活,可以按照比例约束控件位置和尺寸。

使用方法
添加依赖 implementation ‘com.android.support.constraint:constraint-layout:1.1.3’

属性解释

1、app:layout_constraintLeft_toLeftOf=“@+id/tv1”
表示此控件的左边框与某个控件的左边框对齐
在这里插入图片描述

2、app:layout_constraintLeft_toRightOf=“@+id/tv1”
表示此控件的左边框与某个控件的右边框对齐或者在其右边
在这里插入图片描述

3、app:layout_constraintRight_toLeftOf=“@+id/tv1”
表示此控件的右边框与某个控件的左边框对齐或在其左边
在这里插入图片描述

4、app:layout_constraintRight_toRightOf=“@+id/tv1”
表示此控件的右边框与某个控件的右边框对齐
在这里插入图片描述

5、app:layout_constraintTop_toTopOf=“@+id/tv1”
表示此控件的顶部边框与某个控件的顶部边框水平对齐
在这里插入图片描述

6、layout_constraintTop_toBottomOf=“@+id/tv1”
表示此控件的顶部边框与某个控件的底部边框水平对齐或在其下边
在这里插入图片描述

7、app:layout_constraintBottom_toTopOf=“@+id/tv1”
表示此控件的底部边框与某个控件的顶部边框水平对齐或其上边
在这里插入图片描述

8、app:layout_constraintBottom_toBottomOf=“@+id/tv1”
表示此控件的底部边框与某个控件的底部边框水平对齐或其上边
在这里插入图片描述

9、app:layout_constraintBaseline_toBaselineOf=“@+id/tv1”
表示此控件与某个控件水平对齐
在这里插入图片描述

10、tools:layout_editor_absoluteX=“148dp”
表示此控件在布局中X轴的绝对坐标点。
11、tools:layout_editor_absoluteY=“178dp”
表示此控件在布局中Y轴的绝对坐标点
15、layout_constraintStart_toEndOf
表示此控件的左边界在某个控件右边界的右边,及表示此控件在某个控件的右边
16、layout_constraintStart_toStartOf
表示此控件的左边界与某个控件的左边界在同一垂直线上.
17、layout_constraintEnd_toStartOf ``
表示此控件的右边界与某个控件的左边界在同一垂直线上
18、layout_constraintEnd_toEndOf
表示此控件的右边界与某个控件的右边界对齐
19、layout_constraintHorizontal_bias
表示此控件在布局中的水平方向上的偏移百分百
20、layout_constraintVertical_bias
表示此控件在布局中的的垂直方向上的偏移百分百。
21、app:layout_constraintCircle=“@id/tv1”
表示此控件相对于指定控件
22、app:layout_constraintCircleRadius=“150dp”
表示此控件和指定控件中心的距离
23、app:layout_constraintCircleAngle=“120”
表示此控件和指定控件中心连线与Y轴的角度(0-360°)

在这里插入图片描述

Guideline
Guideline,是一个辅助控件,可见性为GONE,主要作用是充当一个锚点。

 高度0dp,宽度与父容器等宽
 android:orientation="vertical"
 宽度0dp,高度与父容器等高
 android:orientation="horizontal"

24、app:layout_constraintGuide_begin=“100dp”
表示距离父容器顶部的距离
25、app:layout_constraintGuide_end=“100dp”
表示距离父容器底部的距离
在这里插入图片描述

26、app:layout_constraintGuide_percent=”0.3”"
表示在距离布局上方30%的位置
在这里插入图片描述

原文链接:https://blog.csdn.net/st526403649/article/details/107199149/

在这里插入图片描述
View中onAttachedToWindow:
作用: 将View附加到窗口上
特点: onAttachedToWindow只会调用一次,不会受用户操作行为影响。
调用时机: 是onResume之后,绘制(onDraw、onMeasure)之前
使用场景: 修改窗口尺寸,例如DialogActivity

Adapter中的onViewAttachedToWindow
作用: 一个item创建并附加到了界面上,就是显示到界面上

Adapter中的onAttachedToRecyclerView
作用:recycleView附加到了界面上。只会调用一次。

原文链接:https://www.jianshu.com/p/df5443c96c91

早期的 Android 系统都是采用 Android.mk 的配置来编译源码,从 Android 7.0 开始引入 Android.bp。很明显 Android.bp 的出现就是为了替换掉 Android.mk。

再来说一说跟着 Android 版本相应的发展演变过程:
Android 7.0 引入 ninja 和 kati;
Android 8.0 使用 Android.bp 来替换 Android.mk,引入 Soong;
Android 9.0 强制使用 Android.bp;
在这里插入图片描述
通过 Kati 将 Android.mk 转换成 ninja 格式的文件,通过 Blueprint + Soong 将 Android.bp 转换成 ninja 格式的文件,通过 androidmk 将 Android.mk 转换成 Android.bp,但针对没有分支、循环等流程控制的 Android.mk 才有效。

这里涉及到 Ninja,Kati,Soong,bp 概念,接下来分别简单介绍一下。

1、Ninja

Ninja 是一个编译框架,会根据相应的 ninga 根式的配置文件进行编译,但是 ninja 文件一般不会手动修改,而是通过将 Android.bp 文件转换成 ninja 格式文件来编译。

2、Android.bp

Android.bp 的出现就是为了替换 Android.mk 文件。bp 跟 mk 文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过 Go 语言编写。

3、Soong

Soong 类似于之前的 Makefile 编译系统的核心,负责提供 Android.bp 语义解析,并将之转换成 Ninja 文件。Soong 还会编译生成一个 android 命令,用于将 Android.mk 文件转换成 Android.bp 文件,不过这个转换功能仅限于灭有分支、循环等流程控制的 Android.mk 才有效。

4、Blueprint

Blueprint 是生成、解析 Android.bp 的工具,是 Soong 的一部分。Soong 负责 Android 编译而设计的工具,而 Blueprint 只是解析文件格式,Soong 解析文件的内容含义。Blueprint 和 Soong 都是由 Golang 写的项目,从 Android 7.0,prebuilts/go/ 目录下新增 Golang 所需的运行环境,在编译时使用。

5、Kati

kati 是专为 Android 开发的一个基于 Golang 和 C++ 的工具,主要功能是把 Android 中的 Android.mk 文件转换为 Ninja 文件。代码路径是 build/kati/,编译后的产物是 ckati。

编译so
1.编译libcamera_mic_jni模块时说link不到libchenan.so
先setup环境编译libchenan模块,接着编libcamera_mic_jni。(如果再执行setup会把编译出来的libchenan.so又给清掉)
2.编译libcamera_mic_jni时报错no rule make it
Android.mk中添加 :LOCAL_MULTILIB := 64
3.再编译libcamera_mic_jni时报错 not find jni.h,由于include<jni.h>
Android.mk中添加:
LOCAL_HEADER_LIBRARIES :=
jni_headers
4.可以先将so导出来 push进lib64中
5.系统应用中调用的时候报UnsatisfiedLinkError,需要添加so到开放库

在Android 31平台,尝试使用第三方应用调用系统SO 库,会报如下的错误
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library “/system/lib64/XXX.so” needed or dlopened by “/apex/com.android.art/lib64/libnativeloader.so” is not accessible for the namespace “classloader-namespace”
大体原因是,Android N 开始限制 第三方 应用使用非公开的 系统库
临时解决debug 方法:
将你要用的到 XXX.so 加入到 /system/etc/public.libraries.txt
,但这个我改了就起不来了
最后改的是vendor/etc/下的文件就ok

6.改完还是报错等一会就自动好了,很奇怪
7.apk可以调用到jni方法,但是native报错不能打开camera,权限问题
8.需要加读写权限尝试可行,修改系统中的某个.ic文件,也在vendor目录下
在这里插入图片描述

LOCAL_PATH:= $(call my-dir)

#此段是预编译第三方库部分
include $(CLEAR_VARS)
LOCAL_MODULE := libaspmodule
LOCAL_MODULE_TAGS := optional
#LOCAL_SRC_FILES := libaspmodule.so
#32位、64位两者都编译
LOCAL_MULTILIB := both
LOCAL_SRC_FILES_arm:= armeabi-v7a/libaspmodule.so
LOCAL_SRC_FILES_arm64:= arm64-v8a/libaspmodule.so

LOCAL_EXPORT_C_INCLUDES := ( L O C A L P A T H ) L O C A L M O D U L E S T E M : = (LOCAL_PATH) LOCAL_MODULE_STEM := (LOCALPATH)LOCALMODULESTEM:=(LOCAL_MODULE)
LOCAL_MODULE_SUFFIX := $(suffix $(LOCAL_SRC_FILES))
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_PREBUILT)

#此段是预编译第三方静态库部分
include $(CLEAR_VARS)
LOCAL_MODULE := libnexsound
#LOCAL_SRC_FILES := libnexsound.a
#32位、64位两者都编译
LOCAL_MULTILIB := both
LOCAL_SRC_FILES_arm:= armeabi-v7a/libnexsound.a
LOCAL_SRC_FILES_arm64:= arm64-v8a/libnexsound.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX:=.a
include $(BUILD_PREBUILT)

#此段是调用前面第三方库编译JNI生成a和so部分
include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= external/tinyalsa/include
LOCAL_SRC_FILES:= com_ecovacs_lib_digmic_DigMic.c
LOCAL_MODULE := libdigmic
LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa libaspmodule
LOCAL_STATIC_LIBRARIES := libnexsound
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值