自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (21)
  • 收藏
  • 关注

原创 Android NDK项目创建的时候C++版本选择都有什么区别

C++的语言标准是由国际标准化组织(ISO)制定和发布的,它规定了C++的语法、语义、库和兼容性等方面的内容。C++的语言标准有不同的版本,每个版本都会添加一些新的特性和改进,以增强C++的功能和性能。在此之前,有C++17(2017年发布),C++14(2014年发布),C++11(2011年发布)等等。Android ndk项目在创建的时候有C++版本选择有4个选项,分别是Toolchain default, C++11,C++14,C++17。

2023-12-01 19:14:32 861

原创 NDK打印android日志

_android_log_print方法,第一个参数是log level,第二个是tag,第三个是日志内容。这样就可以在logcat里面看到刚才的日志。首先在cpp文件中 引入。

2023-12-01 18:59:04 528

原创 在Android上搭建一个NDK项目

target_link_libraries方法是用来指定一个目标文件(可执行文件或者库文件)需要链接的库文件的。你可以指定库文件的名称,也可以指定库文件的路径。你还可以指定链接的范围,比如PUBLIC、PRIVATE或者INTERFACE,来控制库文件的传递性。project方法指定了native lib的名字,也就是MainActivity中init方法load的lib。再来看一下native-lib.cpp,毫无疑问这里面就是stringFromJNI方法的具体底层的实现。

2023-12-01 17:38:16 633

原创 NDK代码编译的方式,ndk-build,Cmake,独立工具链分别有什么区别

NDK代码编译的方式有三种,分别是基于Make的ndk-build,CMake,以及独立工具链。

2023-11-30 19:25:50 592

原创 android log能在release包里面打印吗

在 build.gradle 文件中,设置 buildTypes 的 release 下的 debuggable 为 true,这样就可以在 release 模式下查看 logcat 的日志。但是这样会影响安全性和性能,所以不建议在正式发布的应用中使用。 在 proguard-rules.pro 文件中,添加 -assumenosideeffects class android.util.Log 的规则,这样就可以在 release 模式下删除 log 的代码,避免泄露敏感信息。这种方法需要开启混淆和优化

2023-11-09 19:46:46 507

原创 ArrayList的初始容量是多少。

如果使用无参构造函数ArrayList()创建一个空的ArrayList对象,那么它的初始容量为10。但是,这个容量是在第一次添加元素时才会分配的,也就是说,在创建对象时,ArrayList的底层是一个长度为0的空数组。 如果使用有参构造函数ArrayList(int initialCapacity)创建一个指定容量的ArrayList对象,那么它的初始容量就是传入的参数值。这样可以避免在添加元素时频繁地调整大小,提高性能。

2023-11-09 11:05:51 544

原创 Content-Security-Policy(CSP)的内容构成。

每一个指令后面都应该有一个或多个源,多个源之间使用空格分隔。如果需要允许所有来源的资源,可以使用。会允许从所有源加载脚本。

2023-10-19 11:25:43 161

原创 用ffmpeg删除视频的音轨,让视频静音

再对比看一下video.mp4的信息,是有两个Stream信息,一个video,一个audio。删除以后我们查看muteVideo的文件信息,只有一个Stream:video信息了。

2023-10-08 17:22:04 1628

原创 ffmpeg剪切一段视频

将video.mp4从第十秒开始,剪切20s。

2023-10-08 17:10:19 208

原创 ffmpeg从一个视频中提取音频

从video.mp4中提取音频到文件audioFile.m4a中。

2023-10-08 16:59:03 1182

原创 ffprobe命令

Stream:说明是一个音频流,编码格式是aac,采样率是44100Hz,声道是立体声。Duration:音频总时长:开始播放时间:比特率。可以看到audio.m4a这个文件的所有信息。查看一个音频文件,在终端命令行输入一下命令。

2023-10-08 16:24:02 71

原创 Support for password authentication was removed on August 13, 2021 解决方案

打开你的github,Setting 点击Developer settings。给git设置token样式的remote url。点击generate new token。生成token,以后复制下来。按照需要选择scope。然后就可以正常访问了。

2023-09-05 19:38:07 671

原创 使用Android系统的MediaMuxer写一个音视频合并的方法。

使用Android系统的MediaMuxer写一个音视频合并的方法。

2023-06-28 14:44:20 1428 2

原创 什么是依赖注入(DI)

依赖注入是一种设计模式,最初是Spring框架的核心概念之一。其作用是去除Java类之间的依赖关系,实现松耦合,以便于开发测试。如今这一设计理念也风靡Android端,比如dagger1,dagger2,hilt等一些框架。依赖注入的含义是,当一个类需要引用另一个类的实例时,不是自己创建或获取,而是由外部提供并注入。这样可以减少类之间的耦合,提高代码的可重用性和可测试性。

2023-05-12 16:07:47 330

原创 Dagger1和Dagger2还有Hilt的区别

Dagger1,Dagger2和Hilt都是Android开发中的依赖注入框架,它们的区别如下:

2023-05-12 15:15:22 304 1

原创 dagger2的使用

需要注意,dagger会在编译时生成相应的代码,因此需要在IDE中开启Annotation Processing选项,以便在编译时正常生成代码。同时,需要了解依赖注入的基本原理和设计思想,才能更好的利用dagger实现应用程序的松散耦和可测试性。在需要依赖注入的类中,添加相应的注解。例如,使用@Inject注解对需要注入的对象进行标注,使用@Module注解对提供依赖对象的方法进行标注。根据需要注入的对象,创建相应的组件。在需要使用依赖对象的地方,通过组件对对象进行注入。

2023-05-11 21:07:56 418

原创 kotlin操作对象的扩展函数有哪些?都有什么区别

另外,apply和also函数返回的是对象本身,而let和run函数返回的是执行结果。run:该函数可以在对象的作用域内执行一些操作,并返回执行结果。also:该函数可以在对象的作用域内执行一些操作,并返回该对象本身。与apply函数不同的是,also函数在对象作用域执行完成后,返回的是原始的对象本身。apply:该函数可以在对象的作用域内执行一些操作,并返回该对象本身。let:该函数可以在对象的作用域内执行一些操作,并返回执行结果。// 在myObject作用域内执行一些操作,并返回结果。

2023-05-10 22:28:41 485

原创 Android上将M3U8文件转换为MP4文件

要在Android上将M3U8文件转换为MP4文件,可以使用FFmpeg库。在命令执行期间,可以使用回调来跟踪进度和状态。最后,将生成的MP4文件保存到指定的输出文件路径中。请注意,这只是一个简单的示例代码,某些情况下可能需要更多的错误处理和参数配置。根据您的需求进行修改和优化。在这个方法中,您需要传递M3U8 URL和输出文件路径作为参数。方法将构建FFmpeg命令,并使用。

2023-04-28 15:27:07 1611

原创 DiffUtil的使用

当调用这个方法时,我们会创建一个新的DiffCallback对象,然后使用calculateDiff()方法计算旧数据集和新数据集之间的差异。RecyclerView的DiffUtil用于计算并更新RecyclerView中数据集的变化。通过使用DiffUtil,我们可以避免完全重新加载整个列表,并且只会更改必要的视图。总之,DiffUtil是一个非常有用的工具,可以帮助我们更高效地更新RecyclerView中的数据集。在上面的例子中,我们首先定义了一个自定义的适配器MyAdapter,并实现了一个。

2023-04-28 14:26:47 1067

原创 Kotlin(4)kotlin中协程的实现原理

当我们在协程中调用suspend函数时,协程会进入一个暂停状态,并保存其状态以便稍后恢复执行。它使用suspend函数和状态机来实现多个任务之间的切换,同时使用协程调度器将协程分配到不同的线程上。协程的另一个关键组成部分是协程调度器。Kotlin的协程框架提供了几种不同类型的调度器,例如IO调度器、默认调度器和无限制调度器等。Kotlin中的协程是基于协程框架Coroutine实现的,该框架提供了一个轻量级的并发处理机制。当我们在协程中调用suspend函数时,它会将当前协程挂起,同时允许其他协程运行。

2023-04-27 15:43:06 318

原创 Kotlin(3)kotlin如何用val和var定义所有数据的,底层实现

总之,在底层字节码层面,Kotlin会将不同类型的变量编译成不同的指令,并且会根据上下文自动推断类型。这使得Kotlin能够更高效地处理不同类型的数据,并且可以生成更少的字节码。Kotlin同时也支持其他一些数据类型,如字符串、布尔值、数组等。这些类型也会被编译成相应的指令。在使用这些类型时,Kotlin会根据上下文自动推断类型,并生成相应的字节码。在底层字节码层面,Kotlin会将不同类型的变量编译成不同的指令。这些指令会与Java虚拟机中的相应指令对应。指令,而浮点数类型(如。声明的是只读变量,而。

2023-04-27 15:38:32 153

原创 Kotlin面试(2)说一下协程,并举例阐述一下

Kotlin的协程是一种轻量级的并发处理机制,可以用来代替传统的线程和回调方式。协程的主要目的是使异步编程更加容易和直观,并且可以避免使用回调函数导致的代码嵌套和可读性问题。协程通过挂起和恢复执行来实现任务之间的切换,这样就可以避免创建多个线程和所带来的开销和复杂度。在Kotlin中,协程被视为一种语言机制,因此不需要任何特殊的库或API支持。总之,协程是Kotlin的一项强大功能,可以让异步编程变得更加容易和直观。它可以通过简单的代码来避免复杂的线程和回调函数,并提高程序的可读性和可维护性。

2023-04-27 15:15:27 315

原创 kotlin面试(1):说一下你对kotlin的理解

此外,Kotlin还提供了很好的null安全支持,通过强制非空类型来减少空指针异常的发生。Kotlin的代码比Java代码更加简洁明了,同时也保证了类型安全,这使得程序的可读性和可维护性都有了很大的提高。由于支持与Java无缝互操作,因此Kotlin与Java之间可以轻松进行混合编程,这也为正在使用Java的开发者们提供了更多的选择。总之,Kotlin是一门功能强大的语言,它对Java的改进使得它更加适用于现代编程环境,同时也带给了开发者更多的灵活性和效率。

2023-04-27 15:11:15 114

原创 Android 通过MediaMetadataRetriever获取视频封面和时长

【代码】Android 通过MediaMetadataRetriever获取视频封面和时长。

2022-10-09 22:32:22 1168 1

原创 Android:获取相册视频、图片缩略图

class ThumbnailUtil { companion object { fun getPictureThumbnail( context: Context?, fileId: Long?, fileUri: Uri?, size: Size, ): Bitmap? { if (context == null) return null return.

2021-11-05 17:39:05 1266

原创 给mac zsh 添加Git-completion

下载Git-completion脚本# Create the folder structuremkdir -p ~/.zshcd ~/.zsh# Download the scriptscurl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bashcurl -o _git https://raw.githubusercont

2021-10-12 20:15:28 880

原创 Android文件路径报FileNotFoundException问题解决

val musicFile = File(musicPath) if (!musicFile.exists()) { musicPath = URLEncoder.encode(musicPath, "UTF-8") }这个问题主要是路径中含有中文字符或者空格%等特殊符号,需要用UTF8编码一下。...

2021-10-12 19:58:35 1515

原创 RecyclerView的缓存获取机制

# RecyclerView的缓存获取机制RecyclerView是我们开发中接触比较多的控件。官方给他的定义是"A flexible view for providing a limited window into a large data set."定义中有个large data 很是醒目,那RecyclerView怎么处理大量的数据,而不oom和卡顿呢?这就是RecyclerView里面的缓存机制,首先我们看一下几个基本概念:- Binding: 子视图显示adapter中与其对应位置的.

2021-09-06 16:02:22 517

原创 FragmentContainerView详解

FragmentContainerView 位于androidx.fragment.app包下面,是专门为Fragment设计的自定义布局。它扩展了FrameLayout,所以它可以可靠地处理Fragment事务,并且它还有其他功能来协调Fragment行为。FragmentContainerView应该被用作fragment的容器,通常在一个activity的xml布局中设置,例如: <androidx.fragment.app.FragmentContainerView xm

2021-05-15 14:57:41 23510 3

原创 Git新建一个分支,并且push的新的远程仓库

工作中有时候需要我们在基于现在的分支,新建一个分支,然后单独开发某一个功能。先看一下我们当前的分支情况。git branch -a我们现在本地是master分支,对应远程的origin/master分支。我们现在基于master分支,新建一个本地分支 feature_dev_video,用于开发一个单独的功能视频播放。git checkout -b feature_dev_video这个时候我们就有了一个新的本地分支,feature_dev_video,但是他现在还没

2020-05-15 11:20:39 1238

原创 Android Studio Intellij idea使用 gradle 同步失败解决方法

国内链接google、jcenter的maven仓库,会经常失败,这样解决的问题就是使用阿里云的代理.将gradle的配置文件做如下改动,就可以编译成功了.// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { ...

2020-01-16 17:04:20 1189

原创 Git:SSH密钥生成

SSHSSH密钥SSH密钥允许您在计算机和GitLab之间建立安全连接。在shell中生成SSH密钥之前,请通过运行以下命令检查您的系统是否已有SSH密钥:Windows命令行:type %userprofile%\.ssh\id_rsa.pubGNU / Linux的/ MAC / PowerShell的:cat ~/.ssh/id_rsa.pub如果您看到以...

2019-05-14 11:30:01 1145

原创 Activity生命周期

方法 描述 Killable? Next onCreate() 在Activity开始时调用。这是大多数初始化应该做的:调用setContentView(int)来填充Activity的UI,使用findViewById以编程方式与UI中的小部件交互,调用managedQuery(Uri、String[]、String、String[]、String)来检索显示数...

2019-03-27 15:25:45 168

原创 android View类详解。

Android中的View类代表用户界面中基本的构建块。一个View在屏幕中占据一个矩形区域、并且负责绘制和事件处理。View是所有widgets的基础类,widgets是我们通常用于创建和用户交互的组件,比如按钮、文本输入框等等。子类ViewGroup是所有布局(layout)的基础类。layout是一个不看见的容器,里面堆放着其他的view或者ViewGroup,并且设置他们的布局属性。所...

2019-03-26 13:46:40 10064 2

原创 Android面试:怎么样理解Android系统运行在自己的安全沙箱内?

安装到设备后,每个 Android 应用都运行在自己的安全沙箱内:Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户; 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件; 每个进程都具有自己的虚拟机 (VM),因...

2019-03-18 14:03:37 425

原创 Git第一次提交代码教程

在创建完仓库之后,可以通过如下方式,向仓库提交第一行代码。方法1、先将仓库clone到本地,修改后再push到码云的仓库仓库$ git clone https://***.com/***.git #将远程仓库克隆到本地在克隆过程中,如果仓库是一个私有仓库,将会要求用户输入码云的账号和密码。按照提示输入即可。当然,用户也可以通过配置本地的git配置信息,执行git config命令...

2019-03-18 14:00:09 6235

原创 Android:ProgressBar的不确定模式

&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/r...

2019-03-18 10:23:27 537

原创 掌握JDK8:(四)一个例子讲函数式接口:Consumer

Consumer&lt;T&gt; 是一个函数式接口 jdk1.8加入。 代表一个“接受一个参数,但是不返回值”的函数 函数式方法是accept源码:import java.util.Objects;@FunctionalInterfacepublic interface Consumer&lt;T&gt; { void accept(T t); defau...

2019-03-18 10:08:46 694

原创 掌握JDK8:(三)函数式接口Function接口详解

JDK8开始,Java在java.util.function包里面加入了很多的函数式接口。见下图。今天我们先讲一下Function接口。package java.util.function;import java.util.Objects;/** * Represents a function that accepts one argument and produces a...

2019-03-15 15:34:31 828

原创 掌握JDK8:(二)函数式接口@FunctionalInterface。

函数式接口,是JDK8新进入的新特性。概念:有且只有一个抽象实例方法(Abstract Method)的接口称为函数式接口(Functional Interface)。但是从Object类里面重写的抽象方法除外。此外为了兼容性,JDK8里面还加入了一个默认方法(default method)在接口里面,默认方法是有具体的实现的。没错,就是接口里面的实现方法。举例:我们看一下我们都比较熟悉的...

2019-03-15 14:22:19 278

HttpComponents-4.3.2帮助文档 chm格式, 超好用

HttpComponents-4.3.2帮助文档 chm格式, 超好用

2014-08-15

Junit3.8.1帮助文档 chm格式,英文版,超好用

Junit3.8.1帮助文档 chm格式,英文版,超好用

2014-08-15

Junit4帮助文档,chm格式,英文版,超好用

Junit4帮助文档,chm格式,英文版,超好用

2014-08-15

java1.6中文参考文档 chm格式的,适合英文不好的童鞋。

java1.6中文参考文档 chm格式的,适合英文不好的童鞋。

2013-06-05

FreeMarker中文帮助文档,官方的,特别全面详细

FreeMarker中文帮助文档,官方的,特别全面详细

2013-06-05

圣思园所有视频下载的链接,直接复制到迅雷就可以下载,超快

圣思园所有视频下载的链接,直接复制到迅雷就可以下载,超快 包含 javase javaweb hibernate struts 。视频

2013-06-02

hibernate4.1.7文档APIchm格式的,超好用

hibernate4.1.7文档APIchm格式的,超好用

2013-06-02

lucene4.2.1API chm格式的,超好用

lucene4.2.1API chm格式的,超好用

2013-06-02

chm格式的freemarker-2.3.19API,超好用

chm格式的freemarker-2.3.19API,超好用

2013-06-02

struts2帮助文档,chm格式,使用超方便哦

struts2帮助文档,chm格式,使用超方便哦

2013-05-30

javaJDK7文档API chm格式哦,很方便

javaJDK7文档API chm格式哦,很方便

2013-05-30

macBook Air 使用的dr.com客户端(城市热点)

macBook Air 使用的dr.com客户端(城市热点)保证能用, 只要下载了,将DrClientNS.app文件夹拖进mac电脑里面就能使用。

2013-05-30

数学建模 原书第三版 pdf

数学建模 原书第三版 pdf 帮你很快入手哦

2012-08-23

数据结构1800题有答案 pdf

数据结构1800题有答案 pdf,集合了各个大学多年的数据结构试题,很不错,值得一看

2012-08-23

国外教材数据结构与算法分析(C语言描述)第二版pdf冯舜玺译

国外教材数据结构与算法分析(C语言描述)第二版pdf冯舜玺译 很不错的哦

2012-08-23

算法与数据结构 严蔚敏原版授课PPT

算法与数据结构 严蔚敏原版授课PPT 可以帮助你更好的学习数据结构 原汁原味

2012-08-23

计算机组成原理(第二版)PPT 唐朔飞

计算机组成原理(第二版)PPT 唐朔飞老师的原版PPT,不错哦

2012-08-23

HTTP协议详解

HTTP协议详解

2012-08-22

plsql developer 7.0 最新中文手册

plsql developer 7.0 最新中文手册

2012-08-22

数据结构 严蔚敏 吴伟民 ppt

超清晰的ppt 严蔚敏写的数据结构教材才是王道

2011-11-28

C++ primer plus 第五版纠错

C++ primer plus 第五版纠错

2011-04-23

空空如也

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

TA关注的人

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