本次记录的是系统动画修改实现方法,逻辑就是把选择的动画压缩文件拷贝到/system/media/目录下,这是系统动画文件存储目录,只要目录内有动画文件系统就会自动使用这个文件作为开机动画。由于这个目录是系统目录,所有我们需要注意的就是目录以及目录文件的权限问题,实现逻辑就是先把当前目录权限修改文件可读写权限然后再拷贝文件进去,然后再修改拷贝文件权限。
如下就是文件拷贝代码:
inner class ChangeBootAnimationThread : Thread() {
override fun run() {
val unmount = "mount -o rw,remount /system" // 重新挂载system目录为可写权限
val cpfile = "cat $bootanimPath > /system/media/bootanimation.zip" // 复制新的开机动画到指定目录 bootanimPath 为本地动画文件路径
val mount2 = "chmod 755 /system/media/bootanimation.zip"
val mount = "mount -o -rw-r--r--,remount /system/media/bootanimation.zip"
var process: Process? = null
var os: DataOutputStream? = null
try {
val runtime = Runtime.getRuntime()
process = runtime.exec("su")
os = DataOutputStream(process.outputStream)
os.write(unmount.toByteArray())
os.writeBytes("\n")
sleep(1000)
sleep(40)
os.write(cpfile.toByteArray())
os.writeBytes("\n")
sleep(6000)
os.write(mount.toByteArray())
os.writeBytes("\n")
sleep(1000)
os.write(mount2.toByteArray())
os.writeBytes("\n")
sleep(1000)
os.writeBytes("reboot\n")
os.flush()
LogUtil.e("文件推送成功")
} catch (e: java.lang.Exception) {
e.printStackTrace()
LogUtil.e("文件修改失败:$e")
} finally {
try {
os?.close()
process?.destroy()
} catch (e: java.lang.Exception) {
LogUtil.e("文件修改失败-资源释放:$e")
e.printStackTrace()
}
}
}
}
使用代码如下:
ChangeBootAnimationThread().start()
不需要修改任何系统源码就是如此简单解决了。