Skip to content

Latest commit

 

History

History
78 lines (52 loc) · 3.08 KB

README_CN.md

File metadata and controls

78 lines (52 loc) · 3.08 KB

HuoLaLa unify hook lib

license release

货拉拉 与 Lalamove Android 项目采用inline-hook技术来解决系统级问题以提高系统稳定性与性能问题。

Thread Shield

安全的挂起线程(屏蔽超时事件)

避免当挂起超时时,进程被 Abort 信号杀死。

SuspendThreadSafeHelper.getInstance()
            .suspendThreadSafe(object : SuspendThreadSafeHelper.SuspendThreadCallback {
                override fun suspendThreadTimeout(waitTime: Double) {
                    Log.i("TAG", "Waitting for thread suspend done, spend : $waitTime s")
                }

                override fun onError(errorMsg: String) {
                    Log.e("TAG", "onError: $errorMsg")
                }
            })
  • Android [5,11] : Hook ThreadSuspendByPeerWarning()函数, 将日志致命级别修改为警告级别,如果线程挂起超时,将调用 suspendThreadTimeout() 会通知 Java 层。

  • Android [12,14] : Hook SuspendThreadByPeer() 函数转而调用 SuspendThreadByThreadIdSuspendThreadByThreadId, 此时并不会回调给 Java 调用方, 因为替换方法不会触发 Abort 信号发送,进而不会造成崩溃。

  • Android 15 : Hook StringPrintf() 函数,并且在代理StringPrintf中等待线程真正挂起结束后再执行后续流程, 将调用 suspendThreadTimeout() 会通知 Java 层,并回调等待时间。

收益

在货拉拉国际版业务中, 由于存在一部分低端设备,线程挂起超时导致的崩溃次数较多,修复后收益明显。

suspend_thread_timeout_trend.png

使用方式

1. 添加依赖
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            google()
            mavenCentral()
            maven { url = uri("https://jitpack.io") }
        }
    }
    dependencies {
	    implementation 'com.github.HuolalaTech:hll-sys-hook-android:1.4-SNAPSHOT'
    }
2. 初始化代码
    SuspendThreadSafeHelper.getInstance()
            .suspendThreadSafe(object : SuspendThreadSafeHelper.SuspendThreadCallback {
                override fun suspendThreadTimeout(waitTime: Double) {
                    Log.i("TAG", "Waitting for thread suspend done, spend : $waitTime s")
                }

                override fun onError(errorMsg: String) {
                    Log.e("TAG", "onError: $errorMsg")
                }
            })