Skip to content

Might there be Java/Kotlin API (core or module) support in the future? #1

@minoism

Description

@minoism

很棒的项目!(也许这个应该放到讨论中,但这个仓库没开🤐)
我有一个项目,内部使用 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")
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions