跳到主要内容

代码乐园

代码乐园是为了提供一些小功能而建立的项目

引入依赖

JitPack 发布页面

先确保 repositories 内有 https://jitpack.io:

dependencyResolutionManagement {
repositories {
maven { url 'https://jitpack.io' }
}
}

然后添加对应的依赖:

dependencies {
implementation("dev.oom-wg.PureJoy-CCC:gendoki:-SNAPSHOT") // GenDoki
implementation("dev.oom-wg.PureJoy-CCC:moesa:-SNAPSHOT") // MoeSa
}
功能列表
  • GenDoki: 用于非常简单地配置用于初始化内容的内容提供器
  • MoeSa: 用于在不传入任何参数的情况下通过 GenDoki 在软件启动时校验软件真实性

使用方法

GenDoki

首先编写一个继承自 GenDokiInitializer 的内容提供器, 重写 Application.onInit 函数即可执行初始化操作

示例
import android.app.Application
import dev.oom_wg.purejoy.ccc.gendoki.GenDokiInitializer

class AppInitializer : GenDokiInitializer() {
override fun Application.onInit() {
// 干些什么事情...
}
}
提示

GenDokiInitializer 在运行 Application.onInit 函数时,会在 runCatching 中执行, 所以一般来说不需要自己再加一层 runCatchingtry

然后在 AndroidManifest.xml 中注册内容提供器即可实现在软件启动时执行内容

示例
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<provider
android:name="<包名>"
android:authorities="${applicationId}.<自定义名称>"
android:exported="false"/>
</application>
</manifest>

MoeSa

使用 MoeSa 直接引入依赖即可,无需任何额外操作

引入 MoeSa,会自动判断 applicationInfo.sourceDir 是否与 pm path <包名> 返回的 base.apk 路径相同, 并且判断路径是否以 /data/app/ 开头,以 /base.apk 结尾,并且其中包含包名

还会判断 base.apkuidgid 是否都为 1000(即 system)

并且判断文件权限是否为 644(常规情况下) 或 555(V4 签名 安装情况下) (实际的判断方式是判断文件权限是否在 544~655 范围之内)

备注

如果校验失败,会调用 killProcess(myPid())exitProcess(-1) 强制停止软件运行