AAR Java8 接口 NoSuchMethodError 错误解决记录

遇到一个初看时非常诡异的问题,现已解决,特记录一下解决过程。 🙋‍♀️ 是什么问题? 错误日志 APP运行过程中,忽然报了一个莫名其妙的错误: NoSuchMethodError, 报错的地方是 rxjava3 的 Disposable.disposed() E/AndroidRuntime: FATAL EXCEPTION: main Process: com.github.hanlyjiang.sample, PID: 7357 java.lang.NoSuchMethodError: No static method disposed()Lio/reactivex/rxjava3/disposables/Disposable; in class Lio/reactivex/rxjava3/disposables/Disposable; or its super classes (declaration of 'io.reactivex.rxjava3.disposables.Disposable' appears in /data/app/~~veR3ZUFYzXjZ48FDcAW0Nw==/com.github.hanlyjiang.sample-bhuZG0wVNdVKs_mfxOh5gg==/base.apk) at com.github.hanlyjiang.lib_mod.ViewTest.disposable(ViewTest.java:8) at com.github.hanlyjiang.sample.MainActivity.lambda$onCreate$0(MainActivity.java:15) at com.github.hanlyjiang.sample.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:0) at android.view.View.performClick(View.java:7456) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) at android.view.View.performClickInternal(View.java:7433) at android.view.View.access$3700(View.java:836) at android.view.View$PerformClick.run(View.java:28832) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7902) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933) ⏰ Tip ...

2022年3月13日 · 6 分钟 · 野生莲藕

Dagger 在Android库(SDK)模块中的使用实践

本文主要描述如何使用Dagger解决实际项目中遇到的问题,这两个问题是: 如何在库(SDK)模块中使用Dagger依赖注入? MVP中的Dagger依赖注入如何实现无感注入? 本文不会介绍如何使用Dagger,只专注于描述如上两个问题的解决的前因后果及解决方案。 背景 接手开发一个SDK,大致情况如下: ...

2022年3月6日 · 14 分钟 · 野生莲藕

Gradle学习指南-前言

这个对于安卓开发来说,Gradle可以不了解,但是又必须了解。 说不需要了解,是因为: 通过AndroidStudio建立工程的时候,默认就创建好了Gradle的项目结构及对应的任务,通过IDE来添加模块的时候,也可以自动的添加Gradle的配置。 说需要了解,是因为:有时候会遇到构建错误,还有时候需要改一改构建流程的默认行为,另外有些时候,需要自行扩展一个构建任务。 ...

2021年10月7日 · 2 分钟 · 野生莲藕

简化Android库上传到Maven仓库的gradle配置

配置 android 上传到 maven 中心仓库,发现配置的代码有点多,而且如果有多个库模块需要上传,则需要复制粘贴不少重复的配置代码,于是编写了一个 gradle 插件用于简化提取这个配置过程; 插件用途及效果 本插件用于简化Android库上传到Maven中心仓库的配置,避免每个project的gradle中都放置一份重复较多的配置; ...

2021年6月1日 · 5 分钟 · 野生莲藕

Android bindService流程

本文分析bindService的流程,首先我们通过阅读源码获取一个主线的调用地图,然后提出若干问题,包括:APP进程中如何获取AMS,AMS如何启动APP-service的进程,AMS中如何获取ApplicationThread并与之通讯,Service的启动及绑定流程;然后再通过源码一一解答。最后再整体总结梳理一下整体流程; ...

2021年4月12日 · 28 分钟 · 野生莲藕

搭建Android源码工作环境

简单介绍系统架构、编译环境的搭建 简单介绍利用 AndroidStudio 调试 system_process 进程的方法及编译更新部分系统模块的方式 Android系统架构 Android 系统架构如下两图所示: <?xml version="1.0" encoding="UTF-8"?> 应用框架。应用框架最常被应用开发者使用。很多此类 API 都可以直接映射到底层 HAL 接口,并可提供与实现驱动程序相关的实用信息。 Binder IPC。Binder 进程间通信 (IPC) 机制允许应用框架跨越进程边界并调用 Android 系统服务代码,这使得高级框架 API 能与 Android 系统服务进行交互。在应用框架级别,开发者无法看到此类通信的过程,但一切似乎都在“按部就班地运行”。 系统服务。系统服务是专注于特定功能的模块化组件,例如窗口管理器、搜索服务或通知管理器。应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件。Android 包含两组服务:“系统”(诸如窗口管理器和通知管理器之类的服务)和“媒体”(与播放和录制媒体相关的服务)。 硬件抽象层 (HAL)。HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现。借助 HAL,硬件开发者可以顺利实现相关功能,而不会影响或更改更高级别的系统。HAL 实现会被封装成模块,并会由 Android 系统适时地加载。如需了解详情,请参阅硬件抽象层 (HAL)。 Linux 内核。开发设备驱动程序与开发典型的 Linux 设备驱动程序类似。Android 使用的 Linux 内核版本包含一些特殊的补充功能,例如低内存终止守护进程(一个内存管理系统,可更主动地保留内存)、唤醒锁定(一种 PowerManager 系统服务)、Binder IPC 驱动程序,以及对移动嵌入式平台来说非常重要的其他功能。这些补充功能主要用于增强系统功能,不会影响驱动程序开发。可以使用任意版本的内核,只要它支持所需功能(如 Binder 驱动程序)即可。不过建议使用 Android 内核的最新版本。如需了解详情,请参阅构建内核一文。 以上部分内容来源: https://source.android.google.cn/devices/architecture?hl=zh-cn ...

2021年4月8日 · 13 分钟 · 野生莲藕

[译]Android开发所需要的矩阵知识

翻译国外文章,该文章介绍了Android开发中矩阵相关的数学知识,包括矩阵是什么?矩阵加法及乘法运算,2x2矩阵的变换,最后演进为Android中使用的3x3矩阵。文中图片及动图比较多,相对好懂。 原文链接:https://i-rant.arnaudbos.com/matrices-for-developers/#technical-challenge ...

2021年2月8日 · 27 分钟 · 野生莲藕

编写一个Android Gradle插件

gradle有三种编写插件的方式,我们这里使用在项目中的buildSrc模块中编写插件的方式,自定义了一个应用于Android项目的根据flavor过滤so库的gradle插件; 概述 自定义gradle插件有如下三种方式(🔗链接): 在buildscript中直接编写; 在buildSrc项目中编写插件代码; 在独立的项目中编写插件代码; 这里我们将使用buildSrc方式实现一个gradle插件。 ...

2020年9月20日 · 6 分钟 · 野生莲藕

Android-WebView中Java同JS的交互

Android提供的几种JS同Java交互的方式介绍,通过一个实例介绍通过evaluateJavascript调用JS方法。 Android提供的js原生交互API Android调用 JS 代码: 通过WebView的 loadUrl() 通过WebView的 evaluateJavascript() 方法 Android调用 JS 代码主要使用 第二种方法。 JS 调用 Android 代码: 通过 WebView 的 addJavascriptInterface() 进行对象映射 通过WebChromeClient的 onJsAlert() 、onJsConfirm()、onJsPrompt() 方法回调拦截JS对话框alert()、confirm()、prompt() 消息 通过WebViewClient的shouldOverrideUrlLoading() 方法回调拦截 url 第2和第3中方式能力有限,所以主要是第一种。 ...

2020年3月20日 · 3 分钟 · 野生莲藕

Android事件及手势

android事件基础及手势,主要关注各种手势的使用及其计算原理 。 Android事件基础 这里我们主要关注概念 事件监听器及事件处理程序 可直接查看 官方文档,此处仅做简要描述; 事件监听器 View类的包含一个回调方法的接口,通过setXXXListener来定义事件处理程序; 事件监听器是 View 类中包含一个回调方法的接口。当用户与界面项目之间的互动触发已注册监听器的 View 对象时,Android 框架将调用这些方法。 ...

2018年2月20日 · 17 分钟 · 野生莲藕