【Android】自定义换肤框架01之皮肤包制作

news/2024/7/16 8:09:33 标签: android, skin, skinner, 换肤框架, 不重启换肤
前言

目前为止,市面上主流的安卓换肤方案,其实原理都是差不多的

虽然大多都号称一行代码集成,但其实想要做到完全适配,并不简单

这个系列,就是让大家从零开始,完全掌握这方面知识,这样才能对框架不支持的点自己进行补充

该系列,我将使用小步慢跑的方式,每篇博客都是教会大家一个小知识点,直到完全掌握

皮肤包原理

android的资源,实际上都是从已经安装的apk文件里面去读取的

默认使用的apk路径是context.packageResourcePath

我们只要替换这个apk路径,便可以实现从其它apk加载资源

我们要制作的皮肤包,便是一个apk文件

制作皮肤包

知道原理了,下面便简单了

我们只要打包一个新的apk文件,资源结构和名称和项目完全一致就行了

由于我们只需要资源,其它无关文件是可以删除的

一般保留drawable和color文件夹就行了,皮肤适配主要是用到这两方面

最终的skin-package项目结构如下

在这里插入图片描述

以下是build和manifest文件内容

plugins {
    id("com.android.application")
}

android {
    compileSdk = 34
    defaultConfig {
        namespace = "com.android.app"
        applicationId = "com.android.app"
        minSdk = 30
    }
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
</manifest>

由于我们只需要资源,不需要代码,所以其它配置全部可以省略

点击Build - BuildApk,在build/output/apks下生成安装包

重命名为skin.apk,拷贝到存储卡下,即可以作为皮肤包使用了

Gradle版本说明

这里使用的是Gradle8.7,不同版本Gradle对语法要求可能有差异

APK结构说明

我们顺便再扩展下知识面,看看APK结构到底是什么样的,资源保存在哪里

在这里插入图片描述

可以看到,apk里面有一个arsc格式的索引表,里面维护了所有的package-id-name-path之间的对应关系

我们平时用的Resource类,根据id或name来创建Drawable,就是从这里去读取数据的


http://www.niftyadmin.cn/n/5543017.html

相关文章

星光云VR全景系统源码

星光云VR全景系统源码 体验地址请查看

µCOS-III 任务同步机制-任务信号量

1. 什么是任务信号量 任务信号量是一种用于任务间同步和通信的计数器&#xff0c;通常用于解决任务间的竞争条件和资源共享问题。在C/OS-III中&#xff0c;任务信号量提供了二进制信号量和计数信号量两种类型&#xff1a; 二进制信号量&#xff1a;只能取值0或1&#xff0c;适…

day01:项目概述,环境搭建

文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构&#xff1a;前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…

JVM的基础介绍(1)

本文是“深入学习JVM”系列的第一篇文章&#xff0c;主要介绍JVM、JVM的3大子系统各自的功能。 我是蚊子码农&#xff0c;欢迎各位的点赞、关注和收藏&#xff0c;有了你们的激励&#xff0c;我会带来更好的作品。 一、JVM的介绍 JVM&#xff0c;即Java Virtual Machine&…

Unity3D批量修改名称工具

介绍 该工具用于批量修改某游戏对象的一级子对象名称&#xff0c;功能包括批量添加前后缀、批量修改公共名称字段和批量修改为同一名称&#xff0c;包括撤销和恢复功能。 批量添加前后缀可使用预设从指定数字递增或递减至指定数字。 资源下载 GitHub 百度网盘&#xff08…

【AI原理解析】-目标检测概述

目录 一、目标检测算法的分类 1. 基于传统方法的目标检测算法 2. 基于深度学习的目标检测算法 二、主要目标检测算法 1. R-CNN系列 2. YOLO系列 3. SSD 4. RetinaNet 三、目标检测算法的特点 四、评估指标 五、应用领域 一、目标检测算法的分类 目标检测算法主要分…

python等级考试——一级知识点汇总(turtle画图部分)

&#xff08;本篇文章是针对中国电子学会青少年编程等级考试的&#xff0c;适合初学者以及青少年编程学习者&#xff09; 本篇文章主要介绍turtle画图部分&#xff0c;其他一级考试知识点请移步下方链接&#xff1a;python等级考试——一级知识点汇总&#xff08;不包含turtle…

leetcode判断二分图

判断二分图 图的问题肯定要用到深度优先遍历或者广度优先遍历&#xff0c;但又不是单纯的深度优先遍历算法和广度优先遍历算法&#xff0c;而是需要在遍历的过程中加入与解决题目相关的逻辑。 题干中说了&#xff0c;这个图可能不是连通图&#xff0c;这个提示有什么作用呢&a…