<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jason_Julie的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jason_Julie</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jason_Julie]]></copyright><item><title><![CDATA[Cmake总结（下）]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/149643044</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/149643044</guid><author>Jason_Julie</author><pubDate>Wed, 17 Sep 2025 22:54:58 +0800</pubDate><description><![CDATA[摘要 本文介绍了CMake的嵌套构建方法，通过模块化CMakeLists.txt文件管理复杂项目。主要内容包括： 项目结构采用树状目录，每个源码目录配置独立的CMakeLists.txt文件 根节点定义全局变量，子节点继承使用 使用add_subdirectory建立父子目录关系 将功能模块编译为静态库/动态库 测试程序链接对应库文件进行测试 静态库会被打包进可执行文件，动态库则运行时加载 通过这种嵌套构建方式，可以提升大型项目的可维护性和灵活性。]]></description><category></category></item><item><title><![CDATA[QNX6.5在VMware上面的配置]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/149641627</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/149641627</guid><author>Jason_Julie</author><pubDate>Wed, 17 Sep 2025 22:54:20 +0800</pubDate><description><![CDATA[以下是关于在VMware上配置QNX 6.5的详细文档。本指南适用于VMware Workstation/Player/ESXi环境，假设您已具备QNX 6.5的安装介质（ISO文件或物理光盘）。]]></description><category></category></item><item><title><![CDATA[QNX系统入门总结]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/149641593</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/149641593</guid><author>Jason_Julie</author><pubDate>Wed, 17 Sep 2025 22:53:51 +0800</pubDate><description><![CDATA[QNX系统入门摘要 QNX是基于微内核架构的实时操作系统（RTOS），专为嵌入式、工业控制和汽车电子设计，具有高可靠性、低延迟和模块化特性。其微内核架构仅包含核心功能，通过用户态进程实现服务隔离。开发环境搭建需准备QNX SDP、Momentics IDE和虚拟机工具。核心概念包括进程间通信（IPC）、实时调度和优先级管理。开发实战涵盖从基础应用到调试优化，高级主题涉及多核支持、分布式系统和安全机制]]></description><category></category></item><item><title><![CDATA[Cmake总结(上)]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/149603438</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/149603438</guid><author>Jason_Julie</author><pubDate>Wed, 17 Sep 2025 22:53:18 +0800</pubDate><description><![CDATA[CMake是一个跨平台的项目构建工具，能够自动生成Makefile文件，简化项目构建流程。相比手动编写Makefile，CMake具有跨平台、支持大型项目管理等优势。文章介绍了CMake的基本使用]]></description><category></category></item><item><title><![CDATA[制作Android apk编译环境的docker镜像]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/149569786</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/149569786</guid><author>Jason_Julie</author><pubDate>Wed, 17 Sep 2025 22:52:30 +0800</pubDate><description><![CDATA[本文介绍了如何构建一个包含Android编译环境的Docker镜像，用于隔离化编译APK。主要内容包括：配置Gradle基础镜像、安装Android SDK工具链、导入企业证书、构建自定义镜像；通过docker run命令挂载项目源码进行编译；以及使用docker-compose简化操作流程。该方法实现了开发环境的标准化管理，避免了本地环境污染，同时支持复用Gradle缓存提升编译效率。文中提供了完整的Dockerfile和docker-compose.yml配置示例，适合企业级Android项目的持续集成]]></description><category></category></item><item><title><![CDATA[图像基础概念]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/140473287</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/140473287</guid><author>Jason_Julie</author><pubDate>Wed, 17 Sep 2025 22:51:59 +0800</pubDate><description><![CDATA[像素是一个图片的基本单位，pix是英语单词picture的简写，加上英语单词“元素element”，就得到了“pixel”，简称px，所以“像素”有“图像元素”之意。例如2500×2000的照片就是指横向有2500个像素点，竖向有2000个像素点，总共是500万个像素，也俗称500万像素照片。◼ 对于同一个原始图像源的时候，同样的编码算法，则码率越高，图像的失真就会越小，视频画面就会越清晰。语单词“元素element”，就得到了“pixel”，简称px，所以“像素”有“图像元素”]]></description><category></category></item><item><title><![CDATA[JNI开发基本开发流程]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/143977890</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/143977890</guid><author>Jason_Julie</author><pubDate>Mon, 25 Nov 2024 10:37:48 +0800</pubDate><description><![CDATA[加载动态库的时候需要实现JNI_OnLoad和JNI_OnUnload方法。完成以上步骤就能在动态库加载起来的时候获取到JNIEnv环境进行后续的操作。打印android日志需要配置log.h文件。通过定义获取和卸载JNI配置环境来处理。文件名：jni_onload.cpp。文件名：jni_runtime.h。文件：register_jni.h。]]></description><category></category></item><item><title><![CDATA[音视频基础知识]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/140473373</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/140473373</guid><author>Jason_Julie</author><pubDate>Thu, 21 Nov 2024 17:48:24 +0800</pubDate><description><![CDATA[之后，编码器会再次跳过几个帧，使用第一个 P 帧作为基准帧编码另外一个 P 帧，然后再次跳回，用 B 帧填充显示序列中的空隙。在通常的场景中，编解码器编码一个 I 帧，然后向后跳过几个帧，用编码 I 帧作为基准帧对一个未来 P 帧进行编码，然后跳回到 I 帧之后的下一个帧。在视频采集的时候是录制一帧就编码一帧发送一帧的，在编码的时候会生成 PTS，这里需要特别注意的是 frame（帧）的编码方式，视频帧率：fps，通常说一个视频的25帧，指的就是这个视频帧率，即1秒中会显示25帧。]]></description><category></category></item><item><title><![CDATA[java中的wait和notify的用法]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/119816245</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/119816245</guid><author>Jason_Julie</author><pubDate>Fri, 20 Aug 2021 09:41:19 +0800</pubDate><description><![CDATA[Object的wait方法调用后线程会放弃对象锁，只有该对象调用notify/notifyAll方法才进入对象wait后面的进行运行状态

// wait()
// notify()
// notifyAll();

// 通过调用某对象的wait()方法能让当前线程阻塞
// 通过调用某对象的notify()方法能唤醒一个正在等待该对象的线程
// 通过调用某对象的notifyAll()能唤醒所有正在等待该对象的线程

public class TestDemo {

    public static ]]></description><category></category></item><item><title><![CDATA[PhotoView]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/118936467</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/118936467</guid><author>Jason_Julie</author><pubDate>Tue, 20 Jul 2021 15:38:15 +0800</pubDate><description><![CDATA[PhotoView项目实战
我们要实现的效果是显示一张图片，然后对其进行双击放大缩小，滑动，双指放大缩小。
1.绘制图片到屏幕中间
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    
    // 求原始偏移量，为了让图片居中
    ////计算将图片摆放到视图中央的左上角坐标
    originalOffsetX = ( getW]]></description><category></category></item><item><title><![CDATA[原生的VideoView为什么不能全屏播放]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/115627904</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/115627904</guid><author>Jason_Julie</author><pubDate>Mon, 12 Apr 2021 17:01:12 +0800</pubDate><description><![CDATA[不知道大家有没有遇到过在利用VideoView播放视频的时候会遇到右边缺一块、或者底部缺一块，不能铺满的情况，反正我是遇到了的，所以在此做个总结：
1、原生VideoView的效果，这里没有让底部的导航栏也变透明、并且没有隐藏状态栏

视频：1080*1920      模拟器也是1080*1920
先说说结论：这里如果隐藏状态栏和去掉底部导航就是全屏，也不会缺失右边这一块的

下面我们来重写VideoView的onMeasure方法后
class MyVideoView @JvmOverloads con]]></description><category></category></item><item><title><![CDATA[MediaPlayer播放视频的三种方式]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/115612605</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/115612605</guid><author>Jason_Julie</author><pubDate>Mon, 12 Apr 2021 10:32:33 +0800</pubDate><description><![CDATA[android中提供了两种View供用户播放视频，一种是利用SurfaceView另一是利用TextureView来播放视频。下面将介绍两种方式的使用方法：
利用SurfeceView播放视频
1、利用直接创建SurfaceView对象的方式：
  val surfaceView = SurfaceView(this)

将SurfaceView加入到根布局中
frameLayout.addView(surfaceView)

2、利用xml中添加SurfaceView控件的方式：
  &lt;?xml v]]></description><category></category></item><item><title><![CDATA[Android中的MediaPlayer的使用详解]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/115549602</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/115549602</guid><author>Jason_Julie</author><pubDate>Fri, 09 Apr 2021 18:14:37 +0800</pubDate><description><![CDATA[今天本文介绍的是Andriod系统自带的Mediaplayer,和VideoView实现简单的音乐和视频的播放，至于想做出如酷狗音乐这样的APP的话，只要想做，应该也不难，都是基于此实现了功能的扩展。
Android的MediaPlayer包含了Audio和Video的播放功能，在Android的界面上，Music和Video两个应用程序都是调用MediaPlayer来实现的。
一、播放音频文件
     首先看看MediaPlaer的生命周期


下面是MediaPlayer提供的常用方法




方法
]]></description><category></category></item><item><title><![CDATA[关于Android中assets文件夹和raw目录的区别]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/115548955</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/115548955</guid><author>Jason_Julie</author><pubDate>Fri, 09 Apr 2021 14:07:39 +0800</pubDate><description><![CDATA[相同点
不同点




assets和src/raw
两者目录下的文件在打包后会原封不动的保存在apk包中，不会被编译成二进制。
1、res/raw中的文件会被映射到R.java文件中，访问的时候直接使用资源ID即R.id.filename；assets文件夹下的文件不会被映射到R.java中，访问的时候需要AssetManager类。2、res/raw不可以有目录结构，而assets则可以有目录结构，也就是assets目录下可以再建立文件夹



...]]></description><category></category></item><item><title><![CDATA[Fragment解析]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/115348967</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/115348967</guid><author>Jason_Julie</author><pubDate>Wed, 31 Mar 2021 14:11:28 +0800</pubDate><description><![CDATA[Fragment 详解

##Fragment的产生与介绍
Android运行在各种各样的设备中，有小屏幕的手机，超大屏的平板甚至电视。针对屏幕尺寸的差距，很多情况下，都是先针对手机开发一套App，然后拷贝一份，修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么，当然了，必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分，甚至Activity的界面可以完全有不同的Fragment组成，更帅气的是Fragm]]></description><category></category></item><item><title><![CDATA[系统应用的自动签名方式]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/114065042</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/114065042</guid><author>Jason_Julie</author><pubDate>Thu, 25 Feb 2021 10:35:02 +0800</pubDate><description><![CDATA[最近需要开发一个拥有系统级权限的应用，就了解了下系统应用的签名方式，这里来简单介绍下。
在进行 Android 应用开发的时候，如果开发的是系统应用，那么就需要有系统签名才能正常运行，而系统应用一般是放到系统代码库中跟随系统一起编译。如果想要用 Android Studio 单独对某个开发的应用进行签名的话，有两种方式可以选择。
一种方法是编译完成后使用 signApk.jar 、platform.pk8 和 platform.x509.pem 进行配合签名。
第二种方法是把系统的 platform.pk8]]></description><category></category></item><item><title><![CDATA[Android studio导入系统jar包的方式]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/113625244</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/113625244</guid><author>Jason_Julie</author><pubDate>Thu, 04 Feb 2021 10:34:43 +0800</pubDate><description><![CDATA[前言
android studio导入系统jar包遇到的问题，我这里做一个总结

环境：Android studio 4.0.1 、源码jar包
一、导入jar包在libs目录下

二、使用步骤
1.当前需要导入系统jar包的module所对应build.gradle中添加如下依赖：
compileOnly files('libs/3188-4.4.4-classes.jar')


2.修改3188-4.4.4-classes.jar相对于Android.jar 优先级
project 中 build.g]]></description><category></category></item><item><title><![CDATA[XML的三大解析方式解析]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/112606917</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/112606917</guid><author>Jason_Julie</author><pubDate>Thu, 14 Jan 2021 14:22:00 +0800</pubDate><description><![CDATA[XML
定义
XML，即 extensible Markup Language ，是一种数据标记语言 &amp; 传输格式
作用
对数据进行标记（结构化数据）、存储 &amp; 传输
特性

灵活性: 可自定义标签，文档结构
自我描叙性

XML文档即 一个纯文本文件，代码结构清晰，适合人类阅读
有文本处理能力的软件都可以处理XML


可扩展性: 可在不中断解析，应用程序的情况下进行扩展
可跨平台数据传输: 可以不兼容的系统间交换数据，降低了复杂性
数据共享: XML 以纯文本进行存储，独立于软硬件和应用]]></description><category></category></item><item><title><![CDATA[序列化和反序列化解析]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/112556778</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/112556778</guid><author>Jason_Julie</author><pubDate>Wed, 13 Jan 2021 13:50:55 +0800</pubDate><description><![CDATA[序列化
定义以及相关概念


由于在系统底层，数据的传输形式是简单的字节序列形式传递，即在底层，系统不认识对象，只认识字节序列，而为了达到进程通讯的目的，需要先将数据序列化，而序列化就是将对象转化字节序列的过程。相反地，当字节序列被运到相应的进程的时候，进程为了识别这些数据，就要将其反序列化，即把字节序列转化为对象


无论是在进程间通信、本地数据存储又或者是网络数据传输都离不开序列化的支持。而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响。


从广义上讲，数据序列化就是将数据结构或者是对象]]></description><category></category></item><item><title><![CDATA[ABI-应用二进制接口]]></title><link>https://blog.youkuaiyun.com/Jason_Julie/article/details/112553863</link><guid>https://blog.youkuaiyun.com/Jason_Julie/article/details/112553863</guid><author>Jason_Julie</author><pubDate>Wed, 13 Jan 2021 09:51:32 +0800</pubDate><description><![CDATA[ABI–应用二进制接口
早期的Android系统几乎只支持ARM v5的CPU架构，而现在你知道它支持多少种了吗？7种！
Android系统目前支持以下七种不同的CPU架构：ARMv5，ARMv7 (从2010年起)，x86 (从2011年起)，MIPS (从2012年起)，ARMv8，MIPS64和x86_64 (从2014年起)，每一种都关联着一个相应的ABI。
ABI 是应用程序二进制接口简称（Application Binary Interface），定义了二进制文件（尤其是.so文件）如何运行在相]]></description><category></category></item></channel></rss>