-
-
Notifications
You must be signed in to change notification settings - Fork 288
Closed
Description
很棒的项目!(也许这个应该放到讨论中,但这个仓库没开🤐)
我有一个项目,内部使用 d8 来实现 java method hook,但最近有一些系统 runtime 方面的 hook 需求 d8 无法实现,因此发现了这个项目给我很大的惊喜,但目前似乎没有提供 java/kotlin 的 api? 请问有提供的打算吗?如果没有的话是否愿意接受 kotlin api 的贡献?(因为我发现几乎全部 lsp 项目都是用 java 编写的,kotlin 可能不受宠 😰)
我的项目内部使用着一套自己设计的不算太完善的 hook api,它是由 Kotlin 编译器和 IDE 实现的基于声明式和强类型理念的 api...大概
因此如果可以我很乐意补充这个项目缺少的易用 api . 如果有讨论区或者你们对此感兴趣,我可以提交一些设计细节,我可以随时开始 pr(我承认我是lsp的粉丝!😇它目前大概长这样
class MainActivity : Suannai<Activity>(primaryHook = "com.example.main.MainActivity".type) { // 反射名为 viewBinding 的字段 val Activity.viewBinding: ViewBinding = field() fun init() = hookConstructor( head = { require(arguments.isEmpty()) ... }, tail = { require(returns == Void) ... } ) // Hook: 'public boolean isShowBottomNavigation(boolean show)' fun changeBottomNavigationState(isShow: Boolean) = hook( name = "isShowBottomNavigation", body = { // 替换传参 isShow = false val activity: Activity = thiz activity.viewBinding.apply { if (activity.isFaild) { activity.recreate() callOriginal(isShow) } bottomNavigationView.alpha = 0f return(false) } } ) class ViewBinding : InstanceMock(actual = "com.example.databinding.ActivityMainBinding".type) { val bottomNavigationView = field<View>(type = "com.example.views.ThemeBottomNavigationView") } }
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels