自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

农贤钢的专栏

机会留给有准备的人

  • 博客(40)
  • 收藏
  • 关注

原创 :app debug:armeabi-v7a failed to configure C/C++

app debug:armeabi-v7a failed to configure C/C++,这行报错确实很令人费解,不太好明确排查方向。因此我们尝试用sh gradlew assembleDebug --stacktrace命令来获取更多更详细的信息帮助我们排查。知道了原因,才方便对症下药。解决办法就是安装CMake ‘3.22.1’,可以通过AndroidStudio SDK Tools安装,也可以通过apt或者其它方式单独安装然后通过cmake.dir指定 '3.22.1’的正确路径。

2024-04-10 15:52:53 884

原创 好奇心驱使,看看Android Jetpack Compose 1.5.1性能到底有没有提升?

使用Perfetto工具和大家一起测一测,这次新鲜出炉的 1.5.1 版本是否真的如官方所说的一样性能有所提升?

2023-09-17 23:00:24 944

原创 error: undefined reference to ‘cv::Mat::~Mat()‘解决AndroidStudio集成OpenVC出现的编译报错问题

本来这种类型的博客不是笔者想写的,不过这个问题,笔者经过网上一番搜索却没有可用的解决方案,因此分享出来帮助大家填坑。

2023-04-06 23:24:58 7900 9

原创 记一次Git未Commit直接Pull导致本地代码丢失后的挽救过程

按理说如果执行Git Pull时本地有没有Commit的代码应该会有提示要先Commit的,但有时候脑子抽风一顿操作后才后知后觉本地代码被覆盖导致丢失了,这时候可以尝试以下办法找回丢失的代码。

2023-03-31 23:42:03 5785

原创 Android代码重构系列-03-用了Kotlin就别再用Java的思维写代码了(持续更新)

一文了解如何写出具有Kotlin特性的最佳实践代码

2023-03-19 22:14:32 358 1

原创 Android 音视频开发实践系列-06-初步了解H.264视频编解码技术标准

一文了解什么是H.264

2023-03-12 22:24:50 1225

原创 Android代码重构系列-02-使用Kotlin协程实现一个支持任务编排的轻量级启动器

一文Get任务调度新思路

2023-03-10 13:00:24 914

原创 Android代码重构系列-01-Kotlin实现状态机

一文搞懂状态机的三种实现方式,以及它们的优缺点和食用场景。

2023-03-02 00:21:09 745

原创 Android稳定性系列-01-使用 Address Sanitizer检测原生代码中的内存错误

一文带你入门Address Sanitizer检测原生代码中的内存错误

2023-02-20 12:18:36 1702

原创 Android 音视频开发实践系列-05-从官方下载WebRTC源码编译并发布aar包到GitHubPackages

一文学会下载WebRTC源码编译并发布aar包到GitHubPackages

2023-02-09 23:24:48 1005

原创 Jetpack Compose异常:java.lang.NoSuchMethodError: No static method XXXTheme

记录下使用Jetpack Compose遇到的异常:使用了Jetpack Compose的自定义Theme,但是没启用Jetpack Compose的功能。解决办法:配置对应的JavaVersion版本(至少JavaVersion.VERSION_1_8及以上),配置buildFeature compose为true和composeOptions编译版本。...

2022-06-05 21:22:52 1463

原创 搭建Android日志系统 美团点评大前端Logan入门指南

目录前言总览快速开始下载官方源码使用IDEA打开Logan Server项目使用Docker下载MySQL镜像并启动容器运行Logan Server修改db.properties修改log4j.properties配置Maven使用Tomcat运行程序访问Logan Server运行Logan Site使用Visual Code打开LoganSite环境要求安装运行Logan-Android Sample部分Github Issue解决方法

2022-02-22 22:03:06 6710 14

原创 Android 音视频开发实践系列-04-Android WebRTC推流到SRS服务器实现直播功能

目录前言了解WebRTC部署SRS服务器下载源码并运行可能遇到的问题create session : create session : add publisher : publish negotiate : no found valid H.264 payload typeRTC error code=5020 : create session : stream /live/livestream busy播放卡住的问题参考资料前言最近项目用到WebRTC来

2022-02-17 23:55:14 10039 19

原创 深入理解Java Lambda表达式,匿名函数,闭包

对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流。

2022-02-13 23:37:50 4580 4

原创 Android Jetpack系列-实现Application作用域的共享ViewModel用于Activity和Fragment的相互通信

通过模仿activityViewModels源码,我们定义了两个扩展方法:AppCompatActivity.applicationViewModels和Fragment.applicationViewModels,实现了Application作用域的ViewModel,非常简单。但是这样做是不是对的?会不会带来其它问题比如内存泄露啥的?毕竟ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据,可在发生屏幕旋转等配置更改后继续留存。

2022-02-09 14:31:57 6743 7

原创 Android Jetpack系列-从源码分析LiveData是如何观察Room的

Room进行增删改时,会先触发触发器的相关操作(主要是在room_table_modification_log表中记录发生"UPDATE", "DELETE", "INSERT"操作的数据表的id和状态),待数据库事务结束后,查询room_table_modification_log中是否存在发生变动的表,如果有,则回调对应Observer的onInvaliDated方法,执行对应的mComputeFunction。

2022-02-08 00:19:47 2511

原创 Android使用Github Actions持续集成并自动上传apk到蒲公英App内测分发平台(含证书密码脱敏)

主要介绍下如何上传不确定文件名称的apk,网上大多数文章介绍的此部分内容都是写死的apk名称,但实际的项目一般都会给apk名称加上渠道名版本号编译时间等,因此写死apk名称显然不合适。笔者一开始尝试使用*.apk来匹配,但一直提示无法open file,原因是curl 不支持这样使用通配符。

2022-01-20 23:20:51 4375

原创 Android RecyclerView实现类似于老虎机抽奖,数字滚动等动画效果

1.RecyclerViewLoopScrollAnimation项目介绍RecyclerViewLoopScrollAnimation适用于Android RecyclerView的循环滚动动画的帮助类,可实现类似于老虎机抽奖,数字滚动等效果。2. 效果展示git太大,压缩的厉害,导致帧率太低,建议下载工程运行查看实际效果。3. 使用方法:第一步: 在你的根目录中的 build.gradle 文件中,repositories 标签下添加jitpack maven..

2022-01-18 09:55:09 3847

原创 错误: Type of the parameter must be a class annotated with @Entity or a collection/array of it.

具体错误如下: 错误: Type of the parameter must be a class annotated with @Entity or a collection/array of it. kotlin.coroutines.Continuation<? super kotlin.Unit> continuation); 错误: Not sure how to handle insert method's return type. public abstr

2022-01-16 18:32:59 5092 10

原创 基于Android官方LinearLayoutManager源码修改的完美支持RecyclerView实现无限循环的LooperLinearLayoutManager

水一篇,介绍下最近开源的LooperLinearLayoutManager项目,下一篇会讲解RecyclerView的更多使用案例。无限循环目前已经有挺多方案了,一种是对Adapter进行修改,一种是继承RecyclerView.LayoutManager自定义LayoutManager或干脆继承LinearLayoutManager重写相关方法。但以上方案笔者认为还是有缺陷的,因此干脆不如研究LinearLayoutManager的具体实现,在源码基础上修改支持无限循环,还可以随意加日志方便调试。

2022-01-14 17:41:21 1654

原创 Android 音视频开发实践系列-03-Android MediaCodec 官方中文API文档《译》

目录一、什么是MediaCodec二、视频编码的最低质量底线三、数据类型压缩缓冲区原始音频缓冲区原始视频缓冲区在旧设备上访问原始视频字节缓冲区四、状态五、创建创建安全解码器六、初始化特定于编解码器的数据七、数据处理使用缓冲区的异步处理使用缓冲区的同步处理使用缓冲区数组的同步处理(已弃用)流结束处理使用输出Surface渲染到表面时的变换使用输入Surface搜索和自适应播放支持流边界和关键帧对于不支持自适应播放的解码

2022-01-01 14:47:02 2826

原创 Android 音视频开发实践系列-02-CMake编译rtmpdump

目录一、前言二、克隆rtmpdump源码三、新建一个Native C++工程四、复制librtmp源码到工程中五、为librtmp增加CMake构建脚本六、包含librtmp CMake项目作为构建依赖七、 指定librtmp库头文件目录八、 关联librtmp库九、修改native-lib.cpp代码打印rtmp的版本号参考资料一、前言在上一篇Android 音视频开发实践系列-01-ndk-build编译rtmpdump文章讲解了Linux平台下使用ndk

2021-12-28 10:12:54 3078

原创 Android开发实践之《手摸手教你搭建移动端Https服务器》

目录基础知识准备工作KeytoolProtecle生成HTTPS所需证书使用Keytool生成jks证书使用Protecle将JSK证书转BKS证书使用AndroidASync配置BKS证书实现HTTPS服务器AndroidASync的使用导入并配置BKS证书运行测试遇到的问题源码参考资料基础知识百度关键词:Android Http服务器,就可以搜出来很多关于搭建Android端Http的服务器的教程了,但是关于Https服务资料是比较少的

2021-12-22 20:23:50 2735

原创 Android 音视频开发实践系列-01-ndk-build编译rtmpdump

在上一篇Android开发实践之《NDK和JNI极速初体验》,留了一个坑:独立工具链因官方已弃用不再介绍, ndk-build下一篇文章单独介绍,本文使用AndroidStudio新建的Native C++工程采用的是CMake的编译方式,因此只单独介绍Cmake。这一篇,就介绍如何使用ndk-build编译rtmpdump移植到Android平台上使用。注意,笔者是在Linux平台进行的编译,Window平台下,建议使用虚拟机安装Linux系统或使用Docker进行操作。nkd-build脚本

2021-12-18 16:20:09 2587 1

原创 Android Gradle Plugins系列-02-Maven Publish 插件踩坑指南

如果你刚好把AndroidStudio升级到Android Studio Arctic Fox版本,刚好想新建一个工程来编写自定义Gradle插件,你就会发现你掉坑里了(没错,就是笔者本人了!),噩梦从此开始,一切都是因为你新建的工程中Gradle及其插件的版本已经默认是7.0及以上了。惊喜不惊喜,意外不意外?升级一时爽,填坑两行泪。

2021-12-15 16:31:14 6011 2

原创 Android Gradle Plugins系列-01-自定义Gradle插件入门指南

前言本文内容已经有很多大佬写过了,不过这里为了知识体系的完整,就再写一遍,并加入Maven Publish插件的使用,不感兴趣跳过就好。官方文档:Developing Custom Gradle Plugins在这。插件的开发语言官方说了,不管你用啥语言,只要最终能编译成JVM 字节码就行。不过一般使用Java,Kotlin,Groovy的居多,而静态语言类型的Java和Kotlin相对于Groovy性能更好。插件打包的三种方式Build Script直接build sc

2021-12-13 09:26:11 6684 10

原创 Android ASM实践系列-01-解决Jetpack Room数据库降级引发的崩溃

自定义插件,ASM字节码操作和分析,Transform,这些都不是什么新鲜玩意,只要会使用,重要的就是懂得如何利用工具去高效的解决问题,在这过程中读源码是不可避免的,只有知己知彼,才能百战不殆!

2021-12-10 09:35:32 2240

原创 学不动了,尝试用Android Jetpack Compose重写微信经典飞机大战游戏

前段时间看了TechMerger大佬写的《一气呵成:用Compose完美复刻Flappy Bird!》,甚是有趣,按耐不住那躁动的心,笔者决定跟随大佬的脚步通过写游戏的方式学习Jetpack Compose,Let’s Go!​在这里也强推下fundroid大佬的《用Jetpack Compose做一个俄罗斯方块游戏机》《100 行写一个 Compose 版华容道》,十分精彩。​多看看大佬们的博文,受益匪浅,感谢分享。​《经典飞机大战》是腾讯交流软件微信5.0版本在2013年8月推出的软件内置经

2021-10-20 10:00:43 3062

原创 JAVA实现常用排序算法

插入排序public class InsertSort { public static void insertSort(int[] a) { int i, j, insertNote;// 要插入的数据 for (i = 1; i &lt; a.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入 inser...

2018-03-23 15:20:28 151

原创 《安卓应用开发学习》仿锤子计算器(中)

在上文章《安卓应用开发学习》仿锤子计算器(上)

2014-08-11 15:05:47 1298

原创 《安卓应用开发学习》仿锤子计算器(上)

首先百度搜索下载

2014-08-09 15:31:23 1405 2

原创 解决adb服务死掉的问题

在开发安卓应用的时候经常

2014-08-01 14:28:39 2049

原创 《安卓应用开发学习》--XML解析作业

实现功能:解析AddressTable.xml

2014-06-14 13:49:27 886

原创 《安卓应用开发学习》——关于使用ExpandableListView.setAdapter()方法发生空指针异常

先贴出异常日志03-06 23:39:51.101: E/AndroidRuntime(22049): FATAL EXCEPTION: main03-06 23:39:51.101: E/AndroidRuntime(22049): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xiangan

2014-03-07 15:27:22 1630

原创 java.lang.ClassNotFoundException: package com.xiangang.qq_client.Prototal 常见异常处理方法

java.lang.ClassNotFoundException: package com.xiangang.qq_client.Prototal该类异常是典型的引用类找不到的异常,如上面的例子就告诉我们找不到package com.xiangang.qq_client下的Prototal类,所以我们的解决方法就很简单了。网上找到的方法是:第一:如果是以web目录形式部署,请检查cla

2014-03-05 17:14:22 767

原创 《安卓应用开发学习》——关于Activity无法启动的问题

最近在做Activity之间的跳转时遇到一下的异常:01-01 20:08:40.964: E/AndroidRuntime(1404): FATAL EXCEPTION: main01-01 20:08:40.964: E/AndroidRuntime(1404): java.lang.RuntimeException: Unable to instantiate activity Co

2014-03-04 13:57:17 994

原创 《安卓应用开发学习》——关于ListView不显示内容的问题

ListView不显示内容的现象如下图:图片暂时没弄出来···鼠标单击之后才会显示出来,鼠标松开之后又隐藏了。查看代码,一一验证都没有问题。最后查看布局文件,有可能是LIstView的属性设置出了问题,是不是因为ListView显示的内容高度跟item的高度不一样呢?不管了试试把属性改掉。如下: android:layout_width="wrap_content" andro

2013-11-20 23:59:46 1103

原创 《安卓应用开发学习》——关于隐藏ActionBar标题栏的问题

网上隐藏ActionBar标题栏主要有两种方法:    第一种:就是onCreate方法中添加requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏但是试过之后,发现抛出了空指针异常,debug之后发actionbar为null了,参数无法传递。程序运行错误直接退出。百度解决方法是requestWindowFeature(Window

2013-11-19 20:55:56 1359 5

原创 《安卓应用开发学习》——关于ImageButton图片背景的设置问题

直接进入主题:为什么ImageButton的背景图片有多余的空白部分,就是周围的四四方方的框?    ImageButton拖进布局以后会让我们选择一个图片作为背景,可以是系统自带,也可以是我们事先准备好的图片。打开代码编辑窗口我们可以看见对应的ImageButton所设置图片方式默认是android:src="@drawable/setting_button" />,这是没什么问题的。图片背

2013-11-13 21:26:27 1982

原创 window7下安装Linux双系统(Ubuntu 13.10中文桌面版)

一、准备工作1.首先下载一个虚拟光驱软件用来加载我们下载下来的Ubuntu 13.10的镜像。我这里用的是软媒-魔方3里的虚拟光驱工具,其实这软件挺好用。大家可以试试。2.到官方下载Ubuntu 13.10中文桌面版的镜像文件,当然你也可以选择12.0的版本或者天朝订制的麒麟版都可以。我这里下载镜像的网址是http://www.iplaysoft.com/ubuntu.html,里面有很多

2013-11-07 12:46:02 1705

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除