miit-rule-checker

Introduction: ⭐🎉虽迟但到,这是一个通过拦截 Java 方法调用用以检测应用是否合规的工具,如果你的 APP 正饱受监管部门或应用市场时不时下发整改通知的折磨,那么用它来检查你的代码以及引用的三方库是再好不过的选择了!
More: Author   ReportBugs   
Tags:


Maven Central  


⭐🎉虽迟但到,这是一个通过拦截 Java 方法调用用以检测应用是否合规的工具,如果你的 APP 正饱受监管部门或应用市场时不时下发整改通知的折磨,那么用它来检查你的代码以及引用的三方库是再好不过的选择了!

Step 1. 添加 mavenCentral

allprojects {
    repositories {
        ...
     mavenCentral()
    }
}

Step 2. 添加 Gradle 依赖

dependencies {
    ...
    implementation 'io.github.loper7:miit-rule-checker:0.2.0'
}

如何使用

  • 需求一 检查 APP 内是否存在不合规的方法调用

    检查 MIITRuleChecker 内置的不合规的方法,具体可见下方方法列表

    MIITRuleChecker.checkDefaults()
    

    如果内置的方法不满足当前需求,可自定义方法添加到 list 中进行检查;
    比如新增一个 MainActivity 的 onCreate 方法的调用检查;

    val list = MIITMethods.getDefaultMethods()
    list.add(MainActivity::class.java.getDeclaredMethod("onCreate" , Bundle::class.java))
    MIITRuleChecker.check(list)
    

    当然,如果你想检查多个内置方法外的方法,只需要创建一个新的集合,往集合里放你想检查的方法member,然后传入 MIITRuleChecker.check()内即可。

    log打印如下所示:

  • 需求二 检查指定方法调用并查看调用栈堆

      //查看 WifiInfo class 内 getMacAddress 的调用栈堆
     MIITRuleChecker.check(MIITMethods.WifiInfo.getMacAddress)
    

    log打印如下所示:

  • 需求三 检查一定时间内指定方法调用次数统计

     //多个方法统计 (deadline 为从方法调用开始到多少毫秒后截至统计)
     val list = mutableListOf<Member?>().apply {
              add(MIITMethods.LocationManager.getLastKnownLocation)
              add(MIITMethods.LocationManager.requestLocationUpdates)
              add(MIITMethods.Secure.getString)
          }
    MIITMethodCountChecker.startCount( 20 * 1000,list)
    
    //单个方法统计(deadline 为从方法调用开始到多少毫秒后截至统计)
    MIITMethodCountChecker.startCount(20 * 1000,MIITMethods.LocationManager.getLastKnownLocation)
    

    log打印如下所示:

    切记

    检查完成并完成整改后务必移除方法 miit-rule-checker 库内的所有方法调用,将库一起移除最好
    检查完成并完成整改后务必移除方法 miit-rule-checker 库内的所有方法调用,将库一起移除最好
    检查完成并完成整改后务必移除方法 miit-rule-checker 库内的所有方法调用,将库一起移除最好

    内置方法表

    内置常量 | 对应的系统方法 | 备注 ------------ | ------------- | ------------- MIITMethods.WifiInfo.getMacAddress | android.net.wifi.WifiInfo.getMacAddress() | 获取 MAC 地址 MIITMethods.WifiInfo.getIpAddress | android.net.wifi.WifiInfo.getIpAddress() | 获取 IP 地址 MIITMethods.LocationManager.getLastKnownLocation | android.location.LocationManager.getLastKnownLocation(String) | 获取上次定位的地址 MIITMethods.LocationManager.requestLocationUpdates | android.location.LocationManager.requestLocationUpdates(String,Long,Float,LocationListener) | MIITMethods.NetworkInterface.getHardwareAddress | java.net.NetworkInterface.getHardwareAddress() | 获取主机地址 MIITMethods.ApplicationPackageManager.getInstalledPackages | android.app.ApplicationPackageManager.getInstalledPackages(Int) | 获取已安装的应用 MIITMethods.ApplicationPackageManager.getInstalledApplications | android.app.ApplicationPackageManager.getInstalledApplications(Int) | 获取已安装的应用 MIITMethods.ApplicationPackageManager.getInstallerPackageName | android.app.ApplicationPackageManager.getInstallerPackageName(String) | 获取应用安装来源 MIITMethods.ApplicationPackageManager.getPackageInfo | android.app.ApplicationPackageManager.getPackageInfo(String,Int) | 获取应用信息 MIITMethods.PackageManager.getInstalledPackages | android.content.pm.PackageManager.getInstalledPackages(Int) | 获取已安装的应用 MIITMethods.PackageManager.getInstalledApplications | android.content.pm.PackageManager.getInstalledApplications(Int) | 获取已安装的应用 MIITMethods.PackageManager.getInstallerPackageName | android.content.pm.PackageManager.getInstallerPackageName(String) | 获取应用安装来源 MIITMethods.PackageManager.getPackageInfo | android.content.pm.PackageManager.getPackageInfo(String,Int) | 获取应用信息 MIITMethods.PackageManager.getPackageInfo1 | android.content.pm.PackageManager.getPackageInfo(String,PackageInfoFlags) | 获取应用信息(版本号大于 33) MIITMethods.PackageManager.getPackageInfo2 | android.content.pm.PackageManager.getPackageInfo(VersionedPackage,Int) | 获取应用信息(版本号大于 26) MIITMethods.PackageManager.getPackageInfo3 | android.content.pm.PackageManager.getPackageInfo(VersionedPackage,PackageInfoFlags) | 获取应用信息(版本号大于 33) MIITMethods.Secure.getString | android.provider.Settings.Secure.getString(ContentResolver,String) | 获取 androidId MIITMethods.TelephonyManager.getDeviceId | android.telephony.TelephonyManager.getDeviceId() | 获取 DeviceId MIITMethods.TelephonyManager.getDeviceIdWithInt | android.telephony.TelephonyManager.getDeviceId(Int) | 获取 DeviceId MIITMethods.TelephonyManager.getImei | android.telephony.TelephonyManager.getImei() | 获取 Imei MIITMethods.TelephonyManager.getImeiWithInt | android.telephony.TelephonyManager.getImei(Int) | 获取 Imei MIITMethods.TelephonyManager.getSubscriberId | android.telephony.TelephonyManager.getSubscriberId() | 获取 SubscriberId

相关文章

鸣谢

联系我

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools