自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小红威武

Be a responsible, strong, gentle man.

  • 博客(104)
  • 资源 (6)
  • 收藏
  • 关注

原创 熄屏(待机)状态下打开相机失败的解决

因为设备开机后自动进入熄屏状态(或者说待机状态),而用demo预览会先解锁和点亮屏幕。因此是熄屏(待机)导致的打开相机失败。虽然一直亮屏可以正常拉流,但是我们停止录像后需要先熄屏,才能进入低功耗状态,这样可以最大限度的保证降低功耗。所以最好的解决方案是能在熄屏状态下打开相机正常拉流。首先我们是想办法不让设备熄屏。具体做法是删除系统的systemUi模块,这样开机后就不会自动进入熄屏状态。熄屏状态下相机无法使用的原因是相机会下电,这个是电源管理决定的。项目中用开发的本地apk去打开相机并录像是正常的。

2023-03-23 15:49:04 680

原创 安卓预置系统应用加载so库失败问题

正常情况下通过install直接安装是使用PackageManager,它会将so文件拷贝到系统读取的系统so目录(system/lib或system/lib64)下,提供给App使用;但系统应用需要提前将so文件拷贝到系统目录或者app/lib目录下(/system/priv-app/xxx/lib/arm或…否则运行时将报错“无法找到该so库”。赋值LOCAL_PREBUILT_JNI_LIBS 变量时加上@符号,运行时会加载apk中对应的so库,这样就不需要解压apk中的so并拷贝到lib目录。

2023-01-03 16:16:43 2277

原创 垃圾分类课程

垃圾分类课堂1、什么是垃圾分类一般分为四种可回收垃圾、厨余垃圾、有害垃圾和其它垃圾,垃圾分类就是将这四类分别装进不同的垃圾桶中。方便回收和处理。那什么是回收呢?回收就是将可回收的垃圾进行清洗消毒和加工后,再次利用起来的结果。比如用过的纸张,可以做成新的纸张。厨余垃圾可以用来喂养动物、还可以用来做植物的肥料等等。有害垃圾需要先经过特殊处理,然后在安全无人的地方用土埋起来,让微生物去分解(吃掉)它们。或者送到发电站去烧掉发电。其它垃圾一般也是用土埋起来,然后让微生物吃掉。2、为什么要垃圾分类

2022-05-24 21:23:34 269

原创 系统系统应用权限报错Signature|privileged permissions not in privapp-permissions whitelist的解决

申请系统权限(如WRITE_MEDIA_STORAGE)需要在编译时将app添加到系统应用的白名单。否则会报错如下:2022-05-19 21:08:00.342 2303-2303/? E/AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions wh

2022-05-20 18:43:45 3633

原创 Android JNI及NDK入门教程

Android JNI及NDK入门教程为什么要使用JNI一、native语言性能更优。二、在Java诞生前很多库都是native语言写的,没必要再用Java实现一遍。三、安全性更好:不容易被反编译。JNI是什么全称Java Native Interface。字面上理解就是Java和本地语言的接口。定义了Java和native语言之间互相通信的一套规范。(这是Java定义的,和安卓无关。)NDK是将native语言编译成特定平台的可执行文件的一套开发组件。(将C/C++编译成so库,由An

2021-11-13 11:42:11 2687

原创 静态内部类实现单例模式及其线程安全相关原理

实现方式public class SingleTonInstance { private SingleTonInstance(){}; public static SingleTonInstance getInstance(){ return SingleTonHolder.sInstance; } private static class SingleTonHolder{ private static final SingleTonI

2021-09-14 22:18:07 659

原创 做安卓SDK如何获取当前Activity。

安卓开发中获取当前Activity我们平时一般采用如下两种方式通过ActivityLifecycleCallbacks接口监听当前的Activity实例,在onActivityResumed当中去获取。通过管理每一个Activity的onResume方法,记录所有的activity的状态。最后调用onResume的状态的Activity即为当前activity。但做SDK的时候Application不是我们写的,其它的activity也可能是接入方开启的,这时我们就无法通过以上方式获取。此时可以采

2021-07-08 17:14:54 489

原创 两个模块布局文件同名时出现NoSuchFieldError报错的问题。

当主模块app依赖模块myLib时,myLib中有布局文件myLayout.xml,而与此同时app模块也含有布局文件myLayout.xml,app的就会覆盖myLib的这个布局文件。所以当app的布局文件myLayout.xml修改了的时候,比如删掉了某个控件id。就会报以下错误:java.lang.NoSuchFieldError: No static field xxxx of type I in class Lcom/app/live/R$id; or its superclasses .

2021-01-18 21:32:49 432

原创 安卓SDK三方库与应用三方库版本冲突的解决方案。

开发过程中经常会遇到应用中用到一些三方库。但SDK也用到该三方库。如果版本不一致,就会造成冲突并编译报错。从主应用和SDK的角度,一般有如下三种解决办法:方案一,采用exclude方式剔除SDK中的冲突三方库。例如应用中使用了Gson,SDK也引入了Gson。在build.gradle中引用SDK时,配置如下,则可以将SDK中的Gson剔除,不将它打包到apk。implementation (‘xxx.xxx.sdk’){ exclude group: ‘com.google.code.gson’}

2021-01-04 13:19:25 2410

原创 查看文件定位解决安卓ANR问题。

查看文件定位解决安卓ANR问题。待完成

2020-12-30 18:08:39 137

原创 解决ScrollView嵌套RecyclerView滑动冲突及RecyclerView无法复用的问题。

当我们需要在ScrollView嵌套一个RecyclerView时,会遇到两个问题:滑动冲突问题:即滑动RecyclerView的时候ScrollView其它部分不动,还会有卡顿现象。这个问题可以将ScrollView改成NestedScrollView可解决。RecyclerView无法复用:不管你将RecyclerView的高度设成match_parent或是wrap_conten...

2020-03-23 14:44:22 3467

原创 RecyclerView的复用机制。

Recyclerview在滑动时,滑出屏幕的ViewHolder会被回收到mCachedViews队列中,mCachedViews默认size为2,如果已满则采用先进先出放入mRecyclerPool,显示到屏幕的item会在mCachedViews精确查找,如果有一样的View则直接返回,不会调用onBindViewHolder(),如果没有则从mRecyclerPool取一个同样ViewTyp...

2020-03-18 14:25:07 370

原创 关于arm64手机找不到so库或者出现so是32位不匹配的报错。

我们已经知道(假设)现在主流的手机都是armv7和arm64手机,还有部分是armv5的老机器。有时候我们只有一套arm结构的so库,部分so库可以适配armV7或arm64,但是为了方便以及减少apk体积,我们一般只在libs下放置一套so库在armeabi下,arm64的手机会向下兼容32位手机。可是今天我就出现了不能兼容的现象。情况如下:主模块没有ndk,lib模块是个ndk模块,主模块依...

2020-03-13 14:11:32 1716

原创 SurfaceView详解

SurfaceView的定义SurfaceView是View的子类,它内嵌了一个专门用于绘制的Surface,你可以通过getHolder获取它的SurfaceHolder,并通过SurfaceHolder的getSurface方法获取这个Surface。从而控制这个Surface的格式和尺寸,Surfaceview控制这个Surface的绘制位置。surface是纵深排序(Z-ordered)...

2020-03-02 23:29:17 1289

原创 一个自定义控件画图形的例子让你彻底明白画布旋转和save(),restore()的使用。

本文通过在自定义控件上先旋转画布再画一个向上的箭头,来搞清楚画布旋转与坐标系统变换及最终展示到界面的关系。自定义控件的代码如下。public class MyCustomView extends View { public MyCustomView(Context context) { super(context); } public MyCustomVi...

2019-12-19 21:38:43 219

原创 安卓集成Google登录并进一步获取性别生日手机号等信息

由于公司做海外产品需接入Google三方登录,并且登录后除获取邮箱,用户名和用户id等基本信息外还要获取用户的性别年龄甚至手机号等信息。后面的需求实现起来就有点坑了,主要原因:Google的文档写得真心乱。看网上很多人踩了很多坑还是没找到很好的方法,于是把自己采坑后成功解决的步骤记录下来供大家参考,不谢。1,打开官网文档,https://developers.google.com/identit...

2019-04-10 19:16:27 2883

原创 部署apk时gradle编译错误: Cause: duplicate entry: com/xxx/xxx/xxx.class。已解决

运行项目时出现了这个问题,报错的信息意思是某个类有重复入口,而且这个类是个kotlin类。但是同样的代码在同事的机子上就没问题完全可以部署运行。于是猜想是配置问题,几经周折找到了原因。解决方法是将下图红框中的勾选取消。以下是错误日志。org.gradle.api.tasks.TaskExecutionException: Execution failed for tas...

2018-08-14 18:02:41 8612

原创 Android 使用AudioRecorder和MediaRecorder录音并播放。

我们知道,安卓系统可以AudioRecorder和MediaRecorder录音,两者的区别是:AudioRecorder录制的是pcm数据(也称音频裸数据),可以方便的对音频数据进行处理(比如特效处理)。录音同时还可以使用AudioTrack进行播放。但是pcm数据并不可以采用播放器直接播放,而需要加上音频头信息才可以播放。比如本例中就是将pcm数据文件加上头信息转成wav文件然后便可以使...

2018-07-29 00:48:10 1837

原创 使用SurfaceView绘制一张图片。

明明可以使用imageview显示图片或者使用自定义View的ondraw()绘制一张图片,为什么要用surfaceView这么复杂的东西去绘制图片?因为Android系统是每隔16ms发出VSYNC信号来进行屏幕的重绘,这个重绘是在主线程中的。一旦主线程中的绘制任务时长超过16ms,就会出现卡帧现象。(之前项目在一个界面同时显示时钟每秒刷新和文字跑马灯效果,每次秒数刷新时便会出现跑马灯卡顿...

2018-07-23 21:50:35 3763

原创 ffmpeg3.3.7源码编译

!/bin/bashexport TMPDIR=”/Users/mack/Desktop/tools/ffmpeg-3.3”NDK=/Users/hongenit/ffmpeg_test/android-ndk-r14b NDK_VERSION=android-21 ARCH=arm CPU=arm PREFIX=(pwd)/android/(pwd)/android/(pwd...

2018-07-10 18:56:27 393

原创 Mac上使用Nginx+rtmp搭建自己的直播推流服务器

安装HomeBrew不多说,Mac安装的神器。/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装Nginx扩展home-brew对ngixnx的扩展,在终端输入如下命令。brew tap homebrew/nginx安装Ngi...

2018-07-02 23:05:34 1312

原创 音视频开发大纲

视频文件:封装格式有avi,MP4视频:图像部分,编码格式有aviYUV格式RGB格式音频:音频部分,aac

2018-07-02 00:05:31 700

原创 Constraint Layout 学习总结

想要使用Constraint Layout,最主要的是记住以下一些属性的作用1. layout_constraintLeft_toLeftOf这个代表了改控件的左边与目标控件的左边对齐。例如下布局:<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk...

2018-06-19 15:12:36 761

原创 Resolved versions for app (26.1.0) and test app (27.1.1) differ

最近新建项目gradle编译会出现如下错误:Error:Execution failed for task ':app:preDebugAndroidTestBuild'.Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for ap...

2018-06-19 11:50:35 430

原创 Windows上搭建Tomcat服务器并部署项目

家里的女神突然开始要学习了,女神是前端开发,不知道搭如何服务器,学习Angular和VUE不太方便。正好自己最近做音视频方面的东西需要搭个服务器做视频测试。于是记下windows搭建tomcat服务器的详细步骤供女神参考。1.下载并安装tomcat下载地址: https://tomcat.apache.org/download-90.cgi 下载安装包之后打开安装,在红框中输入...

2018-06-18 22:45:17 8994

转载 隐私政策

隐私政策本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。 您在同意本应用服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐...

2018-06-16 01:27:51 322

原创 Android Studio 修改类的默认注释

在Android Studio中创建一个类的时候,默认会注释create by…如果不修改默认注释,AS会给你报一片屎黄色的警告,说你用了默认的文件头模板。 对于有代码洁癖的码农来说,不能忍。于是点击菜单栏的“File“->“Settings”,搜索file and code template,选中include-> File Header,按需修改。确定后在创建类就不会注释...

2018-04-26 20:03:07 1483

转载 mongodb数据库以及表的备份和恢复,导入和导出

一、 mongodump备份数据库1.一般常用的备份命令格式mongodump -h IP –port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果想导出所有数据库,可以去掉-d.–port复制会变成-p,请注意(可以写成-h 127.0.0.1:30216)。没有为数据库设置密码时-u和-p参数可以不写。 2.导出数据库 [root@local ~]# ...

2018-04-24 10:49:49 731

原创 阿里云Ubuntu服务器部署本地Django+nginx+uwsgi项目

使用阿里云服务器开发后台接口,首先要做的是在阿里云服务器管理页面添加安全组,也就是让服务器的哪些端口可以供外界访问。否则无论如何配置都无法成功访问。 使用命令ssh root@[服务器IP]连接到阿里云服务器安装pip3 sudo apt-get install python3-pip安装django pip3 install Django 安装成功后可以在/usr/local...

2018-04-23 00:34:30 576

原创 linux创建django项目失败原因

执行django-admin.py startproject my_django_projc创建一个名为my_django_projc的django项目时报错:-bash: django-admin.py: command not found原因:环境变量中找不到django-admin.py解决办法:找到该脚本所在位置 find / -name “django-admin.py”...

2018-04-15 23:07:23 721

原创 linux系统apt-get安装软件包失败

今天在阿里云服务器上使用命令apt-get install python3-pip安装pip3。提示E: Unable to locate package xxx。意思是找不到某个软件包。linux的apt-get是在指定软件源的查找的,很可能是因为软件源的设置不对,先使用命令:sudo apt-get update更新软件源。如果还不行只能设置其它软件源。...

2018-04-15 22:24:30 2039

原创 在pycharm环境下使用Django写API接口

一直做安卓开发,经常和后端开发打交道,但对后端接口开发知之甚少。最近抽空学python,第一感觉就是简单易用。但是不实践一下也学不好。正好用Python和Django开发api,既巩固了python基础,也了解了后端的开发。首先是安装环境:python3,pip3,还有pycharm和Django,Windows安装复杂些,有条件建议使用linux或mac系统,会省好多事。其次pychar...

2018-04-13 00:29:21 9173 1

原创 创建一个类似dialog的activity,需要注意的坑。

创建一个类似dialog的activity很简单。只要将activity的样式设置成和dialog样式即可。但是可能会遇到适配某些分辨率的手机会遇到高度不够的问题,如图。但其实还有黑色透明区域可容纳,原因可能是dialog样式的主题限制了显示区域宽高。So,首先设置一个透明activity的样式。 <style name="TranslucentBackground" pa...

2018-04-02 21:59:21 1298

原创 JNI开发中链接各种类型的库的CMAKE文件写法。

一般来说有四种情况:动态库(.so),静态库(.a),NDK自带的库(eg. liblog),编写的源文件(c/c++文件):distribution_DIR 为libs目录 set(distribution_DIR ../../../../libs)1. 动态库:add_library( x264 SHARED IMPORTED)set_tar

2017-11-19 15:55:26 955

原创 IllegalStateException: The specified child already has a parent.

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.at android.view.ViewGroup.addViewInner(ViewGroup.java:4309)

2017-05-27 16:30:53 1178

原创 安卓studio打包时出现OOM: GC overhead limit exceeded

项目中引入了一些第三方的包,然后就出现如下问题。UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665) at co

2017-04-10 21:33:44 1351

原创 VK登录

Error:Gradle DSL method not found: ‘isReleaseBuild()’

2017-04-06 20:45:22 10200

原创 Twiiter第三方登录接入跳坑

04-05 19:15:57.704 4204-4204/com.rcplatform.livechat E/Twitter: Invalid json: <?xml version="1.0" encoding="UTF-8"?> <hash>

2017-04-05 19:28:31 1850

原创 接入google+登录SDK提示google-services.json is missing

接入google+登录SDK时下载官方的demo,然后一堆问题,于是把该安装的最新的库都安装了。 但仍然有如下错误。Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroid

2017-03-17 16:57:03 7237 4

原创 Java1.7通过collections类的sort方法对ArrayList进行排序无效的解决办法。

项目中对ArrayList进行排序,采用如下方法: class SortByNumber implements Comparator<ExchangeCommodity.ListBean> { public int compare(ExchangeCommodity.ListBean listBean1, ExchangeCommodity.ListBean listBean2

2017-03-16 14:26:18 2492 7

CanvasDemo

CanvasDemo

2021-01-17

ffmpeg源码编译脚本

ffmpeg源码编译脚本,分单个库版和多个库版。

2016-12-26

yuv查看工具

解码后得到的yuv原始文件查看。

2016-12-26

ffmpeg视频解码demo

裁剪编译ffmpeg并用于实现安卓端解码demo的源码。

2016-12-26

解码工程jni目录文件

博文“裁剪编译ffmpeg并用于实现安卓端解码”中所用到的文件。

2016-12-26

source insight utf-8插件

2016-12-17

空空如也

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

TA关注的人

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