![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 54
鸡蛋卷啊卷
这个作者很懒,什么都没留下…
展开
-
unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTa
AndroidStudio java jdk 11切换原创 2023-10-27 14:28:05 · 697 阅读 · 0 评论 -
Activity + Fragment + ViewPager Activity被销毁
Activity被销毁,Fragment如何处理,如何恢复,如何测试原创 2023-07-30 17:17:56 · 494 阅读 · 0 评论 -
【架构 Flutter实践 Clean架构 && TDD测试驱动开发---1.0】
对于Flutter在逐渐的熟悉,基本经历的几个阶段BLoC pattern 试着使用Dart语言的 Stream 去做些刷新处理(很多入门书也是这么说的)Provider 挺方便好用的库,正在使用Clean Architecture 正在想实践一波的东西,当然和看的《架构整洁之道》有关《架构整洁之道》绝对要推荐一波,怎样去评价组件的好坏、组件的发展周期、SOLID重新回顾、引出 clean架构、编程几十年也不会变的泛型。原创 2022-10-13 22:37:03 · 1491 阅读 · 0 评论 -
【Android图像:GPU与HardwareComposer Layer合成的区别 】
GPU 与 HWC 的合成图层差异, SurfaceView为何效率高于TextureView原创 2022-07-15 14:13:43 · 2635 阅读 · 0 评论 -
Flutter 是否退出页面的异常 (异步调用场景)
异步操作,退出页面时产生的崩溃原创 2022-01-11 18:40:41 · 3182 阅读 · 0 评论 -
build gradle settings 设置、读取变量
需求可以在 settings.gradle, build.gradle 文件中读取根据变量 控制编译流程(用什么路径了)1. 新建gradle文件好处:settings.gradle、build.gradle都可以用坏处:需要建立新文件新建一个文件 const.gradleext { msg = "hello world"}在 settings.gradle build.gradle中直接导入 const.gradle 文件// 括号内为 相对路径,依项目而定原创 2021-05-11 14:10:07 · 2940 阅读 · 0 评论 -
Android 获取全屏高度(包含StatusBar)
答案这个方法包含了 StatusBar Point realSize = new Point(); Display realDisplay = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); realDisplay.getRealSize(realSize); int h_sc原创 2021-05-10 18:27:29 · 642 阅读 · 0 评论 -
【日常bugfix——Android PopupWindow x offset 无效】
结论偏移量小于PopupWindow的宽了情景我是AnchorView的右下角弹出PopupWindow设置xoffset为 -30,但是不生效,x轴没有偏移,y轴仍有效问题代码 menuPopupWindowTip.showAsDropDown(anchorView, -30, -40, Gravity.RIGHT | Gravity.BOTTOM);原因PopupWindow如果偏移出屏幕之外,API会纠正偏移到 屏幕里面Gravity.RIGHT | Gravity.BOTT原创 2021-04-27 19:15:32 · 745 阅读 · 1 评论 -
【吸顶效果 CoordinatorLayout AppBarLayout CollapsingToolbarLayout NestedScrollView】
总结怎样实现吸顶,用白话说:1. CoordinatorLayout 协调LayoutFrameLayout的子类,协调子View之间的交互。通过属性:behavior、anchor 实现子ViewAppBarLayoutNestedScrollView添加默认behavior app:layout_behavior="@string/appbar_scrolling_view_behavior"用这个布局嵌套你的RecyclerView、ScrollView了,滚动的Vie原创 2021-04-27 14:17:39 · 975 阅读 · 0 评论 -
【Android 12: RenderScript depreciate 迁移到Vulkan】
RenderScript 我的用处图片处理:把预览帧的YUV转为RGB,生成Bitmap对象已知是TextureView.getBitmap最快,但使用OpenGLSurfaceView可能就只是回调获取YUV数据了,这种情景 RenderScript就派上用场了做高斯模糊效果,做旋转Bitmap简单记下RenderScript在Android 12 depreciate了,推荐你用 跨平台GPU计算的VulkanRenderScript还是可以用,但可能运行在CPU上,当然具体看原创 2021-04-27 13:05:21 · 719 阅读 · 0 评论 -
NestedScrollView子View未全部填充高度
用android:fillViewport=“true” <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@s原创 2021-04-21 10:18:49 · 735 阅读 · 0 评论 -
AndroidStuido No version of NDK matched the requested version && NDK does not contain any platforms.
结论:1.查看项目的 local.properties 文件,看是否有ndk.dir。如果没有按如下格式写,之后再试试sdk.dir=/Users/****/Library/Android/sdkndk.dir=/Users/****/Library/Android/sdk/ndk/22.0.7026061StackOverFlow连接其他方案:设置ANDROID_NDK_HOME环境变量指向你的NDKNDK does not contain any platforms....原创 2021-03-25 10:58:17 · 244 阅读 · 0 评论 -
【Kotlin suspend coroutines 原理,代码转为状态机,粗略笔记】
结论kotlin的suspend coroutines,为简化 异步代码 的书写,compiler处理异步回调。程序员注明异步的method ,以 direct call形式编码compiler生成 回调,并以 状态机 调用如视频所说,没有magic。类比于用 中文写程序,中文是宏命令啥的。(个人臆测)我了解的点compiler帮你用 回调书写异步代码compiler将你的code,翻译成状态机,来运行、暂停你的代码 。相当于用关键字 suspend、await 告诉compiler,原创 2021-03-06 12:50:00 · 496 阅读 · 0 评论 -
【Android日常--- Lottie 3.*动画播放异常--异步加载资源】
结论:LottieAnimationView setAnimation在 2.*是同步加载的 json、图片资源, 3.*采用的异步加载。而且是强制的采用LottieDrawable 配合ImageView, 可以自主选择 加载方式代码重点代码LottieCompositionFactory.fromAssetSync同步加载资源 private var mPetLottieDrawable = LottieDrawable() fun init(rootView: Vi原创 2021-01-25 20:23:19 · 841 阅读 · 0 评论 -
【Android日常--- ImageView的手势缩放-图片初始化缩放-自定义ScaleType】
问题与结论:怎样进行手势缩放采用 Matrix 对图片进行缩放,调用ImageView.setImageMatrix 设置采用 ScaleGestureDetector 获取Touch事件对应的scale数值怎样限定ImageVeiw的初始缩放规则 (自定义ScaleType)如:图片宽度 scale 到屏幕宽度,高度 按图片比例缩放。 (最大程度展示图片)在onMeasure中对imageScale 进行初始化注意ImageView的ScaleType要设置为 matr原创 2021-01-17 14:21:19 · 609 阅读 · 0 评论 -
【Touch事件传递-- 粗略索引记录笔记- 从Native到Java IMS到View Looper 监听UnixDomainSocket】
IMS,WMS都是在SystemService进程内的不同线程IMS两个ThreadInputReaderThread 轮训设备 dev/inputInputDispatcherThread 分发通过 InputMoniter和WMS连接通过InputChannel 和APP连接通过UnixDomainSocket 连接APPLooper的epoll监听了这个fd的变化App的Looper传递给ViewRootImplLooper回调 InputEventReceiv原创 2020-12-29 23:30:22 · 178 阅读 · 0 评论 -
Android NDK下STD库share static方式加载 (so库混乱调用问题)
结论-DANDROID_STL=c++_shared有该选项 share方式加载,打包的so库不含有STD代码没该选项 static方式加载。// 打so库的build.gradleandroid { compileSdkVersion rootProject.android.compileSdkVersion defaultConfig { externalNativeBuild { cmake {原创 2020-12-10 21:57:27 · 4959 阅读 · 0 评论 -
Android 应用统一字体设置 typeface
字体字体有三个粒度1. style宽、粗、斜 public static final int NORMAL = 0; public static final int BOLD = 1; public static final int ITALIC = 2; public static final int BOLD_ITALIC = 3;2. typeface字符构造: MONOSPACE(每个字母一样宽)、SERIF衬线(字母最一笔,加个横线)、 sans-ser原创 2020-11-16 17:41:31 · 1319 阅读 · 0 评论 -
android window 层级的代码设置(PopUpWindow遮盖问题)
代码import androidx.core.widget.PopupWindowCompat;PopupWindowCompat.setWindowLayoutType(popupWindow, WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL + 100);AndroidX或者support包中的代码注意要在show之前调用show之后,虽然PopUpWindow的LayoutType字段值变了,但没有IPC给WindowMa原创 2020-11-10 10:30:32 · 3674 阅读 · 0 评论 -
Unable to create application data OkHttp崩溃bug---1.1 背景分析
原因推测:bug出现在conscrypt项目代码该项目用于实现加密算法,用于Https的TLS层Android在 8.1.0 大范围更新了conscrypt的算法,引入了一个bug这个bug导致fd大范围激增,且这个bug避开了OKHttp关于connection的约束()[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VY0atxDj-1603434647124)(https://lh3.googleusercontent.com/proxy/m2cmr2hYF原创 2020-10-23 14:32:49 · 1089 阅读 · 0 评论 -
文件遍历异常Caused by: java.lang.StackOverflowError: stack size 1039KB
解决办法采用广度优先遍历原因最早用的深度优先遍历,递归操作。没想到居然有用户 目录套目录,套了 6562 层(你是测试派来的逗比吗。。。。)更改 private fun traverseFile(rootFile: File) { var checkFile: File? = rootFile val queue = ArrayDeque<File?>() queue.offer(checkFile) whi原创 2020-10-17 19:26:18 · 3682 阅读 · 2 评论 -
Unable to create application data OkHttp崩溃bug
遇到的错误结论页面存在过多的 https 请求,每次申请ssl资源时,创建一个pipe,最后耗光了 可打开文件描述符的数量需要明确下 页面的https 资源消耗情况原因直接崩溃Log E NativeCrypto: AppData::create pipe(2) failed: Too many open filesnative资源被耗尽(FileDescriptor),导致pipe 打开文件出问题OkHttp issue类似案例可能导致其他问题1.AppData::create原创 2020-09-03 17:27:53 · 2450 阅读 · 6 评论 -
【组件化架构--1.1.0】SDK版本号命名规范
简化版本Google的太麻烦了,毕竟自己项目没那么大,有个简化的就好major-minor-bugfix-suffixalpha 接口不固定、功能实现中(开发中, 1.0.3-alpha)beta 接口固定、功能稳定(开发中, 1.0.3-beta)无后缀 正式发行版本 (1.0.0)Google Android版本举例1.0.0-alpha01修个bug1.0.1-alpha011.0.2-alpha021.0.2-beta011.0.2-rc011.0.2名称m原创 2020-07-26 18:05:46 · 876 阅读 · 0 评论 -
JNI 防混淆 Android proguard
先写最终解决办法-keep class com.test.DocDetect { *;}com.test.DocDetct 换成你的JNI类异常java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoadAPK的release包崩溃,debug包正常JNI内反射加载类找不到导致反编译APK(或者看mapping文件),发现DetectResult类,被rename 成 a.b.c,包名都变了方法添加JNI原创 2020-07-26 17:37:23 · 1354 阅读 · 0 评论 -
Android undefined reference to `stderr‘
和NDK的版本相关build.gradle(module级别)对吧原配置 android { compileSdkVersion 29 defaultConfig { minSdkVersion 16 targetSdkVersion 29更改后:android { compileSdkVersion 29 defaultConfig { minSdkVersion 23 targetSdkVers原创 2020-07-14 14:35:17 · 712 阅读 · 0 评论 -
DeepLink 与 APPLink 与 IntentFilter跳转
DeepLink 与 Uri跳转DeepLink是指Google提出的采用 deepLink,配置的 跳转方式Uri是指 传统的在 AndroidManifest中声明 IntentFilter的 data,设置段链接的方式跳转结论:采用scheme非http的Uri跳转更加方便http 跳转的 deepLink和Uri是一样的效果scheme为 http的 Uri和 DeepLink跳转,都要在设置中授权,默认不授权,无法跳转Uri跳转 scheme 不是http 可以直接跳转,无需授原创 2020-06-30 11:01:17 · 1074 阅读 · 0 评论 -
【Android从图标点击开始----- 1.进程资源角度 冷启动热启动Cold Warm Hot start】
应用的startup分为三种,耗时从多到少:cold warm hot官方文档Cold Start系统进程 需创建APP 进程开机后 第一次启动APP系统kill app系统的任务:loading and launch applaunch app后,立即展示Blank Window创建app进程系统创建app 进程后,app进程负责任务:创建app的对象实例登录 Main Thread创建 Main Activityinflate viewLaying out原创 2020-06-16 01:49:07 · 583 阅读 · 0 评论 -
Android调用系统剪切图像模块踩坑(含代码方案 和 GitHub完整demo)
手机兼容性问题:intent规范是AOSP中相机,不是SDK的规范。兼容性 百花齐放。。。。很不靠谱,啥UI、交互都有小米6不支持,在onActivityResult的intent实参中返回 Bitmap的参数 (有说是Bitmap太大导致)华为手机裁剪界面UI: 左侧X(叉)退出,右侧✅(对勾)保存但点击 对勾 ,不会保存退出。只有点击 X 退出解决方案:以上都支持,startActivity时intent 传入剪切图片的 保存地址。所以每次调用 剪切API,产生 当前时间戳 名原创 2020-06-12 16:04:18 · 474 阅读 · 0 评论 -
Kotlin null safe let run also apply with return
如何正确使用 ?. ?: let来避免空指针,并简化书写Java的错误示例//*** private WeakReference<TextureView> textureViewReference; @Override public int getWidth() { return textureViewReference.get()...原创 2020-04-29 14:49:26 · 221 阅读 · 0 评论 -
Android Parse error when parsing manifest.手动安装成功,自动安装失败
如题低版本手机上:程序安装报错; 高版本没问题。在SD上手动安装没问题;程序安装有问题Parse error when parsing manifest.原因API<=23的系统,不支持private目录安装解决boolean old = Build.VERSION.SDK_INT < Build.VERSION_CODES.N;OutputStream os =...原创 2020-04-27 10:35:26 · 801 阅读 · 0 评论 -
【Android架构Retrofit-1.0-概述-使用教程】
retrofit: 改进、翻新Retorfit将网络请求 抽象为 java接口采用注解,描述配置参数通过动态代理将在使用线程池执行请求网络请求、解析response的封装框架,并不执行 真正的联网操作Retrofit 2.0 自带OkHttp使用步骤添加Retrofit依赖,打开网络权限创建 response 描述响应数据的类创建 request 描述请求的接口...原创 2020-04-11 03:09:06 · 194 阅读 · 0 评论 -
【Android系统更新--- Android10-getDeviceId返回null---DeviceId---AndroidID】
用意保护用户隐私限制第三方APP 访问到超出 APP使用期间的数据(device id、meid等)导致10之后DeviceID不可用,推荐使用AndroidIDAndroid 10系统针对un-resetable 数据读取,新增限制。影响的方法BuildgetSerial()TelephonyManagergetImei()getDeviceId()getM...原创 2020-03-04 10:14:38 · 6393 阅读 · 0 评论 -
【Android性能优化-电量优化-App Standby Bucket-API28-Android_P】
Android电量优化进展IceCreamSandwich 4.0 4.0.3, 14 15Jelly Bean 16 17 18, 4.1 4.2 4.3KitKat 19, 4.4KitKat wear 20, 4.4wLollipop 21 22, 5.0 5.1Marshmallow 23, 6.0Nougat 24 25, 7.0 7.1.1Oreo 8.0 8.1,...翻译 2020-02-28 03:59:26 · 2006 阅读 · 0 评论 -
【Android图像1.1:Android中TextureView和SurfaceView的根本区别】
TextureView与SurfaceView根本区别是 与别的图层数据(Buffer)合成的硬件不同, 不同的图像进行composite(混合),效率一部分取决于 composite的工具原创 2020-02-18 00:52:20 · 2153 阅读 · 0 评论 -
【Android系列1.2 HAL---硬件抽象层- 驱动规范 】
HALhardware module(硬件模块、驱动)的规范HAL 对比 应用开发(驱动开发)就是FrameWork层(内核)Activity(hw_module_t)Activity.onCreate (*open)规范必须”继承“自hw_module_t作者、版本等描述实现 hw_module_methods_t 结构体(内 有个函数指针 open)/hard...原创 2020-02-16 14:07:50 · 219 阅读 · 0 评论 -
【Android系列1.1 驱动编程 -- Ashmem驱动源码】
Ashmem 驱动代码地址Ashmem是Android提供的共享内存的IPC机制,通过驱动程序 提供共享内存实现驱动提供的方法static const struct file_operations ashmem_fops = { .owner = THIS_MODULE, .open = ashmem_open, .release = ashmem_release, .read = ...原创 2020-02-13 02:17:34 · 186 阅读 · 0 评论 -
【Android系列2.0 进程 --- SystemManager服务】
ServiceManager服务Binder进行IPC时的ContextManager: 通过service的名称,返回binder的句柄,使Client进行IPC由init进程扫描init.rc启动的二进制可执行文件service servicemanager /system/bin/servicemanager class core user system g...原创 2020-02-10 04:44:56 · 1013 阅读 · 0 评论 -
【Android系列2.0 进程 --- 应用进程】
应用进程// 写的简单点,以后再补充虚拟机实例信息循环Binder线程池创建流程AMS通过unix domain socket连接Zygote,fork出应用进程AMS是Zygote fork出的SystermService进程开启的 service (TODO:具体 以线程、进程形式运行, 后续再补充)AMS(ActivityManagerService)startProc...原创 2020-02-01 18:35:30 · 181 阅读 · 0 评论 -
【Android系列2.0 进程 --- SystemService进程】
System进程与系统服务相关ActivityManagerService(AMS)WindowsManagerServicePowerManagerService等等进程名ps命令查看 system_serverDDMS查看 systerm_processSystem进程的调用顺序Zygote进程创建虚拟机在虚拟机中 反射运行ZygoteInit类的mai...原创 2020-01-30 16:05:50 · 315 阅读 · 0 评论 -
【Android系列2.0 进程 --- Zygote进程】
Zygote进程init进程解析init.rc文件,以service形式fork出Zygote进程加载了Dalvik虚拟机监听unix domain socket,用于fork 应用进程执行的第一个程序为 frameworks/base/cmds/app_process/app_main.cpp最初的名字是app_process,后用 pctrl 系统调用改为zygo...原创 2020-01-30 15:06:53 · 253 阅读 · 0 评论