自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

命运之手

业精于勤而荒于嬉 行成于思而毁于随

原创 【Android】安卓环境变量配置

这篇博客没啥技术含量,主要是记录下一些小细节,防止新手走弯路,有时很久不碰自己也会忘了 变量 值 功能 JAVA_HOME D:\dev\jdk JDK位置 ANDROID_HOME D:\dev\sdk AndroidSDK位置 Path D:\dev\sdk\platf...

2020-05-20 23:11:18 21 0

原创 【NDK】【009】通过CMake编译Native代码

前面我们已经介绍过,通过Gradle/命令行来编译Native代码,通过JNI/JNA来调用Native代码 这里我们再介绍一种比较新的方法,Gradle+CMake编译Native代码,很适合从C语言转过来的开发人员

2020-05-20 00:37:23 35 0

原创 【Java】在设计Callback功能时,如何巧妙回避Java的强制异常处理机制
原力计划

有这样一句话:衡量Java设计师水平和开发团队纪律性的一个好方法,就是读读他们应用程序里的异常处理代码 什么是Java的强制异常处理 强制异常处理案例 巧妙回避Java的强制异常处理机制 以上设计方法和UncaughtExceptionHandler的区别 总结

2020-05-19 16:48:27 40 0

原创 【Java】java.lang.reflect.Type详解
原力计划

Type简介 获取Class的接口实现和类继承信息 数组的Class与Type 获取Field的字段类型 ParameterizedType Gson泛型解析原理 模拟Gson的TypeToken类存储泛型信息 TypeToken写法优化

2020-05-17 15:26:54 55 0

原创 【Android】【NDK】目标文件,静态库,动态库

目标文件 目标文件是由源代码编译而成的二进制文件 源代码是供开发者阅读的文本文件,它的体积大,而且本质上都是文本,无法直接被机器使用,所以需要先编译为目标文件 一个源代码文件,经过编译就会对应生成一个目标文件 静态链接库 供主程序代码调用的库文件,在编译时,静态链接库里面的功能都会被打包到主程序里...

2020-05-16 20:28:24 24 0

原创 【Android】【NDK】解决Lame库编码MP3声音速度变快的问题

这个问题可能是由于把单声道PCM作为双声道PCM来编码造成的 这样就有一半的数据从左声道被编到了右声道,于是播放速度快了一倍,总时长短了一半 我看网上大多Lame库的Demo都默认是双声道,没有考虑到单声道的问题 解决方法:单声道和双声道分开进行编码 //转码单声道PCM void enco...

2020-05-16 15:11:32 58 0

原创 【NDK】【008】NDK编译Lame库
原力计划

什么是Lame Lame是一个C语言MP3编码库 Lame源码本身是运行在PC平台的,我们对其进行了稍加修改,使其适用于Android平台 PCM转MP3是安卓开发中常见的需求,PCM是未经处理的原生音频数据,安卓录音得到的都是PCM数据,但是一般网站都会要求MP3格式的,因为PCM体积太...

2020-05-16 14:59:52 75 0

原创 【Android】【NDK】JNA解决java.lang.UnsatisfiedLinkError: Error looking up function错误

cpp中的公开方法需要用extern "C"修饰 extern "C" int sum(int a, int b){ return a + b; } extern "C"表示使用C编译器规则编译此方法 C编译器在编译时...

2020-05-12 00:25:08 93 0

原创 【Android】华为和小米手机后台进程防杀策略

原生安卓系统和国产定制系统区别 微信等应用为什么可以常驻后台 小米手机关闭性能优化 华为手机关闭性能优化

2020-05-07 16:22:55 221 0

原创 【Android】【IDE】AndroidStudio导出工程代码

通过File - Export to Zip File可以直接将项目代码导出为Zip文件 这个功能

2020-05-07 13:47:19 43 0

原创 【Android】【代码调试】多进程情况下进行调试

多进程情况下,可以通过【Attach to Process】来绑定辅助进程进行调试 但这样有一个问题就是,无法对辅助进程的onCreate方法进行调试 因为只有在进程启动后才可以绑定进程进行调试,而辅助进程启动时执行onCreate方法只是一瞬间的事情 等手动绑定完进程后,onCreate方法一...

2020-04-28 11:05:19 45 0

原创 【Java】【Json】Gson序列化时忽略特定字段

在字段前加transient关键字,gson就会在序列化时忽略这个字段 transient关键字本是配合Java自带的Serilizable序列化接口使用的,gson直接借用了这个特性 public class TreeNode<T extends TreeNode> { ...

2020-04-08 16:21:40 75 0

原创 【Android】【UI】EditText高级特性

设置报错信息 EditText edit; edit.setError("输入内容不能为空"); 设置键盘类型 inputType属性 // android:inputType="number" android:inputType=&qu...

2020-04-07 22:39:01 29 0

原创 【Android】【IDE】解决Attach Debug to Process找不到手机进程问题

安卓调试进程有两种方式 一种是通过Debug模式直接启动 另一种是先打开应用,再通过Attach Debug to Process绑定进程,就可以中途进行调试 我遇到过几次Attach Debug to Process找不到Android进程的问题 IDE只会显示Attach with Java ...

2020-03-25 10:46:58 296 0

原创 【Java】【Gradle】Gradle构建SpringBoot项目,Gradle模块化管理
原力计划

为什么我要使用Gradle 我是个Android开发者,对Gradle接触较多,较为熟悉,使用Gradle对我问题不大 Gradle比Maven更加简洁灵活,代码看起来更加美观 我爱研究探索,喜欢折腾,想尝试新事物。用Gradle构建SpringBoot项目是我自己想出来的,后来去网上一查...

2020-03-19 20:45:05 111 0

原创 【Java】【IDE】解决IntelliJ Idea控制台乱码问题

打开idea/bin/idea64.exe.vmoptions文件,添加以下配置 -Dfile.encoding=UTF-8

2020-03-19 15:33:13 35 0

原创 【Android】【控件绘制】监听控件绘制变化

需求 在开发中,我们可能时常会碰到这样的需求,诸如: 监听地图缩放等级变化 监听控件中的画面变化 监听ViewGroup中的节点变化 一般方法 很多时候,控件和类库并没有为我们提供统一的回调方法来监听这些事件 一般我们解决的方法就是,开一个线程,每隔1秒或100毫秒就去重新查询下界面内容...

2020-03-18 15:47:23 32 0

原创 【项目管理工具】解决SVN丢失so文件的问题

引发迷之BUG的原因 由于在Linux系统,文件夹时常有一些隐藏的系统文件是以so作为后缀名的,这些文件并不属于项目文件 同理,在Windows中显示隐藏文件之后,我们也能看到一些名为 .DS_Store Thumbs.db的系统文件 TortoiseSVN默认帮我们排除了这些文件,so文件也因此...

2020-03-17 18:21:30 26 0

原创 【Android】【项目发布】两分钟发布GitHub项目到Maven仓库

常见术语简述 Maven:全名Apache Maven,是Apache开发的一个软件项目管理和项目自动构建工具 Maven仓库:存放Maven依赖的类库的地方,可以是远程服务器,也可以是本地磁盘 JCenter:一个由 bintray.com维护的Maven仓库 Maven Centra...

2020-03-06 21:19:43 66 0

原创 【Android】【机型适配】解决Android10有文件权限但无法访问文件的问题

Android10对权限的管理更加严格了,主要有以下两点 权限按单个分配,不再按组分配,以前申请了读存储卡权限,即可获得同组的写权限,现在不行了 存储卡读写权限需要在Application的Manifest清单中声明 <application android:requestL...

2020-03-06 12:57:18 1729 4

原创 【NDK】【007】NDK使用Logcat控制台,JString和C++标准库

注意事项 使用Log控制台 使用JString 使用C++标准库 将std::cout重定向到Logcat控制台

2020-03-04 00:21:28 96 0

原创 【NDK】【006】AndroidStudio编译和调用so库

前面我们已经讲解过,如何在Java中使用JNI和DLL,这和在Android中使用JNI和SO原理是完全一致的,流程也相似,只是编译的平台和工具不同 如果我们前面都学透了,现在就会很轻松了。下面我们开始讲解,如何在Android中使用JNI 安装NDK开发环境 Tools - SDK Manage...

2020-02-29 20:05:13 83 0

原创 【Android】【IDE】AndroidStudio使用本地Gradle最佳方案
原力计划

Gradle相关配置 一个Android项目中,以AndroidStudio3.6为例,和Gradle相关的配置大概有以下地方 各个选项和文件的作用 现在介绍下图中选项和文件夹的作用,了解原理,大家才知道怎么做,为什么这么做 选项1:指定Gradle仓库的本地缓存位置,即下载的库/Jar...

2020-02-27 23:34:56 244 4

原创 【文件服务】Everything快速搭建局域网文件共享搜索服务

什么是Everything Everything是一款在Windows上的,提供文件索引查找服务的软件 软件体积不到2M,可以独立运行,而且界面简洁,搜索速度极快 Everything在十秒内即可搜索到Windows上的全部文件,包括类型大小时间等信息 如果运行了后台服务,无需等待,随时就可以搜索...

2020-02-24 15:38:43 225 0

原创 【Javascript】【视频录制】通过video标签和canvas实现视频截图录制和下载

录像原理 创建一个画布,video标签本身不具备记录画面功能,所以我们需要通过Canvas来达成这个功能 创建一个录制器,与CanvasStream绑定,这样画布绘制什么,录制器都能触发回调 创建一个定时器,不停通过CanvasContext来捕捉video标签画面,然后绘制到Canvas...

2020-02-24 14:18:23 350 1

原创 【Java】【编译原理】path,classpath,java.library.path的区别

path:环境变量。java在编译源代码时,可能会调用到多个命令,编译器会到path变量所包含的所有目录下,逐个去寻找对应的同名的命令行程序 classpath:类加载路径。java程序在运行时,除了主程序之外,还会用到其它的类库,classpath指定了其它类库的class文件所在位置 ja...

2020-02-24 00:18:32 54 0

原创 【NDK】【005】JNA调用dll动态库

<font color='fuchsia' >**什么是JNA**</font> - [ ] JNA全称Java Native Access,是JNI之外另一个Java访问C++的混编框架 - [ ] JNA非Java自带功能,需要导入第三方类库 ...

2020-02-23 23:01:29 49 0

原创 【NDK】【004】动态库管理,dll加载原理

这篇博客我们主要讲解,Java程序是如何查找dll的 根据这个查找规则,我们又该如何去管理dll文件,如何修改软件运行参数 Java程序会从哪些地方查找dll文件 当前运行目录:默认为jar包所在目录,或工程代码所在根目录 操作系统环境变量:我们平时配JDK时,path变量中包括的所有位置都...

2020-02-23 01:10:54 31 0

原创 【NDK】【003】JNI调用dll动态库

JNI调用C++规则 使用IntelliJ Idea和CLion开发JNI 源代码

2020-02-22 16:05:18 50 0

原创 【NDK】【002】将C++代码编译为dll共享库

什么是共享库 C++代码可以编译成类库,直接分发给其它应用调用,这使得可以很容易地将自己的代码以库文件的形式共享给他人使用,同时还能保护源码不泄漏 C++共享库在Windows中以dll文件的形式存在,而在Linux系统中则以so文件的形式存在,这两种文件想必大家都不陌生,其实它们都是C++共享库...

2020-02-21 09:26:44 92 0

原创 【NDK】【001】JNI和NDK的关系

JNI,全称Java Native Interface,是Java语言本身提供的一套Java和C++之间互调的机制 NDK,全称Android Native Development Kit,是一套用于在Android中方便开发C++动态库开发的工具集 NDK可以根据Java中的native方法...

2020-02-20 22:06:50 20 0

原创 【Android音视频开发】【008】通过安卓系统服务进行屏幕截图和录像

安卓提供了一个屏幕投影服务(Media Projection Service),可用于将屏幕影像投影到虚拟显示设备(Surface) 利用这个服务,我们可以对屏幕进行截图和录像,这个服务是针对整个屏幕的,不支持单个控件截图录像 但是我们可以对Bitmap进行裁剪,得到我们要的部分 屏幕截图 ...

2020-02-20 18:17:28 67 0

原创 【Android】【屏幕截图】通过Canvas缓存进行屏幕截图

我们知道,控件都是通过Canvas进行绘制而呈现出来的 如果我们将Canvas的绘制过程缓存起来,再将其写入到位图中,那么就可以得到这个控件的图像 如果我们对DecorView(Window布局的根节点)的Canvas进行缓存捕捉,那么就可以得到整个界面的图像 Bitmap对象本身带有裁剪的功能,...

2020-02-18 17:33:23 50 0

原创 【Android】【手机适配】Android自定义导航栏和全面屏适配方案

名词说明 状态栏:StatusBar,手机上方显示电量、时间的横条 导航栏:NavigationBar,手机下方显示虚拟按键的横条 标题栏:ActionBar,应用顶部显示标题的横条 全面屏:界面内容占屏幕面积超80%以上的屏幕叫做全面屏,想要达到这个屏占比,基本都是没有导航栏的 状态...

2020-02-17 16:58:30 157 0

原创 【Java】【线程同步】Java线程同步全API详解及代码实测

前言 这篇博客重点在于讲解API细节,对于同步异步还没有清晰概念的同学,请先自行补全入门基础,这里不再累述 由于Java为线程API都设置了强制异常检查,所以编程时需要编写大量的try-catch代码,为了节省这些无意义代码,让博客更简洁清晰,我们封装了一个Threads工具类,来屏蔽这些异常检查...

2020-02-16 22:30:56 31 0

原创 【Android】【IDE】AndroidStudio3.5编译出现D8 Errors: Program type already present问题解决方案

Program type already present这个问题,一般是由于项目中多个模块引用了相同的库,但版本号不同引起的冲突 但今天我更新了AndroidStudio和Gradle版本后,本来正常的项目,突然就报了这个错误,显然这个不是由以上正常原因引起的 一来这个项目本来正常的,如果有冲突早...

2020-02-14 12:43:39 903 0

原创 【零基础学QT】【052】CLion完美搭建Qt开发环境

什么是CLion CLion是JetBrain公司开发的一款C语言开发环境,JetBrain比较出名的有:开发Java的Idea,开发网页的WebStorm,开发Android的AndroidStudio,JetBrain系列是当之无愧的宇宙最优秀IDE CLion在纯粹的WIndows开发上,可...

2020-02-09 20:38:46 262 0

原创 【C++】【编译器】C语言编译器的那些事

GNU和Linux GCC和G++ make与makefile cmake与CMakeLists MinGW Cygwin和MSVC MinGW和Cygwin是如何将GCC移植到Windows上的

2020-02-09 03:55:05 70 0

原创 【零基础学QT】【051】专栏完结篇

由于本专栏定位是Qt基础教程,内容到此已经足够了,基本涵盖了全部的基础知识点,还顺带讲解了一些关键性的原理和思想 当然,后面如果发现一些比较实用的功能,还是会继续添加到此专栏,但是不会像现在这么更新频繁了 这个专栏从2019年8月底开始写,共50篇博客,内容涵盖了全部的C++和Qt基础知识 今天是...

2020-02-07 17:00:47 47 0

原创 【零基础学QT】【050】Qt Quick主题样式

内置主题样式 使用内置样式 定制Imagine Style 自定义Window

2020-02-07 16:56:28 46 0

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