import{_ as s,o as n,c as a,a as l}from"./app.65ee8e4f.js";const e={},o=l(`
\u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u53D1\u9001\u548C\u63A5\u6536\u6570\u636E\u7684\u89E3\u51B3\u65B9\u6848\u3002
\u9700\u8981\u6EE1\u8DB3\u7684\u6761\u4EF6
\u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5426\u5219\u65E0\u6CD5\u5EFA\u7ACB\u901A\u8BAF\u3002
\u8FD9\u91CC\u63CF\u8FF0\u4E86
wait
\u4E0Eput
\u65B9\u6CD5\u7684\u57FA\u672C\u4F7F\u7528\u65B9\u6CD5\u3002
\u901A\u8FC7\u4F7F\u7528 dataChannel
\u6765\u5B9E\u73B0\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u7684\u901A\u8BAF\u6865\uFF0C\u539F\u7406\u4E3A\u53D1\u9001\u63A5\u6536\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u3002
\u6A21\u5757\u793A\u4F8B\u5982\u4E0B
// \u4ECE\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u83B7\u53D6
dataChannel(packageName = "com.example.demo").wait<String>(key = "key_from_host") { value ->
// Your code here.
}
// \u53D1\u9001\u7ED9\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B
dataChannel(packageName = "com.example.demo").put(key = "key_from_module", value = "I am module")
\u5BBF\u4E3B\u793A\u4F8B\u5982\u4E0B
// \u4ECE\u6A21\u5757\u83B7\u53D6
dataChannel.wait<String>(key = "key_from_module") { value ->
// Your code here.
}
// \u53D1\u9001\u7ED9\u6A21\u5757
dataChannel.put(key = "key_from_host", value = "I am host")
\u4F60\u53EF\u4EE5\u4E0D\u8BBE\u7F6E dataChannel
\u7684 value
\u6765\u8FBE\u5230\u4EC5\u901A\u77E5\u6A21\u5757\u6216\u5BBF\u4E3B\u56DE\u8C03 wait
\u65B9\u6CD5\u3002
\u6A21\u5757\u793A\u4F8B\u5982\u4E0B
// \u4ECE\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u83B7\u53D6
dataChannel(packageName = "com.example.demo").wait(key = "listener_from_host") {
// Your code here.
}
// \u53D1\u9001\u7ED9\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B
dataChannel(packageName = "com.example.demo").put(key = "listener_from_module")
\u5BBF\u4E3B\u793A\u4F8B\u5982\u4E0B
// \u4ECE\u6A21\u5757\u83B7\u53D6
dataChannel.wait(key = "listener_from_module") {
// Your code here.
}
// \u53D1\u9001\u7ED9\u6A21\u5757
dataChannel.put(key = "listener_from_host")
\u7279\u522B\u6CE8\u610F
\u63A5\u6536\u65B9\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\u624D\u80FD\u6536\u5230\u901A\u8BAF\u6570\u636E\u3002
\u5C0F\u63D0\u793A
\u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 YukiHookDataChannel\u3002
\u901A\u8FC7\u901A\u8BAF\u6865\u529F\u80FD\uFF0C
YukiHookAPI
\u8FD8\u4E3A\u4F60\u63D0\u4F9B\u4E86\u5728\u7528\u6237\u66F4\u65B0\u6A21\u5757\u540E\uFF0C\u5224\u65AD\u6A21\u5757\u662F\u5426\u4E0E\u5BBF\u4E3B\u7248\u672C\u5339\u914D\u7684\u89E3\u51B3\u65B9\u6848\u3002
\u6211\u4EEC\u53EA\u9700\u8981\u8C03\u7528 checkingVersionEquals
\u65B9\u6CD5\uFF0C\u5373\u53EF\u5B9E\u73B0\u8FD9\u4E2A\u529F\u80FD\u3002
\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u53EF\u8FDB\u884C\u53CC\u5411\u5224\u65AD\u3002
\u4F60\u53EF\u4EE5\u5728\u6A21\u5757\u4E2D\u5224\u65AD\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u662F\u5426\u4E0E\u5F53\u524D\u6A21\u5757\u7684\u7248\u672C\u5339\u914D\u3002
\u793A\u4F8B\u5982\u4E0B
// \u4ECE\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u83B7\u53D6
dataChannel(packageName = "com.example.demo").checkingVersionEquals { isEquals ->
// Your code here.
}
\u4F60\u8FD8\u53EF\u4EE5\u5728\u5BBF\u4E3B\u4E2D\u5224\u65AD\u662F\u5426\u81EA\u8EAB\u4E0E\u5F53\u524D\u6A21\u5757\u7684\u7248\u672C\u5339\u914D\u3002
\u793A\u4F8B\u5982\u4E0B
// \u4ECE\u6A21\u5757\u83B7\u53D6
dataChannel.checkingVersionEquals { isEquals ->
// Your code here.
}
\u65B9\u6CD5\u56DE\u8C03\u7684\u6761\u4EF6
\u5BBF\u4E3B\u3001\u6A21\u5757\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5E76\u5728\u6FC0\u6D3B\u6A21\u5757\u540E\u91CD\u542F\u4E86\u4F5C\u7528\u57DF\u4E2D\u7684 Hook \u76EE\u6807\u5BBF\u4E3B\u5BF9\u8C61\u3002
\u5C0F\u63D0\u793A
\u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 YukiHookDataChannel\u3002
\u8FD9\u91CC\u53EA\u5217\u51FA\u4E86\u5728\u6A21\u5757\u4E2D\u4F7F\u7528\u7684\u4F8B\u5B50\uFF0C\u5728\u540C\u4E00\u4E2A\u5BBF\u4E3B\u4E2D\u76F8\u540C\u7684 key
\u59CB\u7EC8\u4E0D\u5141\u8BB8\u91CD\u590D\u521B\u5EFA\uFF0C\u4F46\u4E0D\u540C\u7684\u5BBF\u4E3B\u4E2D\u5141\u8BB8\u5B58\u5728\u76F8\u540C\u7684 key
\u3002
\u7279\u522B\u6CE8\u610F
\u5728\u6A21\u5757\u548C\u5BBF\u4E3B\u4E2D\uFF0C\u6BCF\u4E00\u4E2A dataChannel \u5BF9\u5E94\u7684 key \u7684\u56DE\u8C03\u4E8B\u4EF6\u90FD\u4E0D\u5141\u8BB8\u91CD\u590D\u521B\u5EFA\uFF0C\u82E5\u91CD\u590D\uFF0C\u4E4B\u524D\u7684\u56DE\u8C03\u4E8B\u4EF6\u4F1A\u88AB\u65B0\u589E\u52A0\u7684\u56DE\u8C03\u4E8B\u4EF6\u66FF\u6362\uFF0C\u82E5\u5728\u6A21\u5757\u4E2D\u4F7F\u7528\uFF0C\u5728\u540C\u4E00\u4E2A Activity \u4E2D\u4E0D\u53EF\u4EE5\u91CD\u590D\uFF0C\u4E0D\u540C\u7684 Activity \u4E2D\u76F8\u540C\u7684 key \u5141\u8BB8\u91CD\u590D\u3002
\u793A\u4F8B\u5982\u4E0B
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// \u56DE\u8C03\u4E8B\u4EF6 A
dataChannel(packageName = "com.example.demo1").wait(key = "test_key") {
// Your code here.
}
// \u56DE\u8C03\u4E8B\u4EF6 B
dataChannel(packageName = "com.example.demo1").wait(key = "test_key") {
// Your code here.
}
// \u56DE\u8C03\u4E8B\u4EF6 C
dataChannel(packageName = "com.example.demo1").wait(key = "other_test_key") {
// Your code here.
}
// \u56DE\u8C03\u4E8B\u4EF6 D
dataChannel(packageName = "com.example.demo2").wait(key = "other_test_key") {
// Your code here.
}
}
}
class OtherActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// \u56DE\u8C03\u4E8B\u4EF6 E
dataChannel(packageName = "com.example.demo1").wait(key = "test_key") {
// Your code here.
}
// \u56DE\u8C03\u4E8B\u4EF6 F
dataChannel(packageName = "com.example.demo2").wait(key = "test_key") {
// Your code here.
}
}
}
\u5728\u4E0A\u8FF0\u793A\u4F8B\u4E2D\uFF0C\u867D\u7136\u56DE\u8C03\u4E8B\u4EF6 A \u4E0E B \u662F\u540C\u4E00\u4E2A\u5BBF\u4E3B\u4E2D\u7684\u56DE\u8C03\u4E8B\u4EF6\uFF0C\u4F46\u662F\u5B83\u4EEC\u7684 key
\u76F8\u540C\uFF0C\u6240\u4EE5\u56DE\u8C03\u4E8B\u4EF6 A \u4F1A\u88AB\u56DE\u8C03\u4E8B\u4EF6 B \u66FF\u6362\u6389\u3002
\u56DE\u8C03\u4E8B\u4EF6 C \u7684 key
\u4E0D\u4E0E\u5176\u5B83\u91CD\u590D\uFF0C\u867D\u7136\u56DE\u8C03\u4E8B\u4EF6 D \u7684 key
\u4E0E\u56DE\u8C03\u4E8B\u4EF6 C \u76F8\u540C\uFF0C\u4F46\u662F\u5B83\u4EEC\u7684\u5BBF\u4E3B\u4E0D\u540C\uFF0C\u6240\u4EE5\u53EF\u4EE5\u540C\u65F6\u5B58\u5728\u3002
\u56DE\u8C03\u4E8B\u4EF6 E \u5728\u53E6\u4E00\u4E2A Activity \u4E2D\uFF0C\u56DE\u8C03\u4E8B\u4EF6 F \u4E0E\u56DE\u8C03\u4E8B\u4EF6 E \u7684 key
\u867D\u7136\u76F8\u540C\uFF0C\u4F46\u5B83\u4EEC\u4E5F\u4E0D\u662F\u540C\u4E00\u4E2A\u5BBF\u4E3B\uFF0C\u6240\u4EE5\u53EF\u4EE5\u540C\u65F6\u5B58\u5728\u3002
\u7EFC\u4E0A\u6240\u8FF0\uFF0C\u6700\u7EC8\u56DE\u8C03\u4E8B\u4EF6 B\u3001C\u3001D\u3001E\u3001F \u90FD\u53EF\u88AB\u521B\u5EFA\u6210\u529F\u3002
\u517C\u5BB9\u6027\u8BF4\u660E
\u5728\u8FC7\u5F80\u5386\u53F2\u7248\u672C\u7684 API \u4E2D\u4E0D\u540C\u7684\u5BBF\u4E3B\u8BBE\u7F6E\u76F8\u540C\u7684 key \u4F1A\u9020\u6210\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u4E8B\u4EF6\u56DE\u8C03\uFF0C\u4F46\u662F\u6700\u65B0\u7248\u672C\u66F4\u6B63\u4E86\u8FD9\u4E00\u95EE\u9898\uFF0C\u8BF7\u786E\u4FDD\u4F60\u4F7F\u7528\u7684\u662F\u6700\u65B0\u7684 API \u7248\u672C\u3002
\u7279\u522B\u6CE8\u610F
\u4E00\u4E2A\u76F8\u540C key \u7684\u56DE\u8C03\u4E8B\u4EF6\u53EA\u4F1A\u56DE\u8C03\u5F53\u524D\u6A21\u5757\u6B63\u5728\u663E\u793A\u7684 Activity \u4E2D\u6CE8\u518C\u7684\u56DE\u8C03\u4E8B\u4EF6\uFF0C\u4F8B\u5982\u4E0A\u8FF0\u4E2D\u7684 test_key\uFF0C\u5982\u679C OtherActivity \u6B63\u5728\u663E\u793A\uFF0C\u90A3\u4E48 MainActivity \u4E2D\u7684 test_key \u5C31\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002
\u76F8\u540C\u7684 key \u5728\u540C\u4E00\u4E2A Activity \u4E0D\u540C\u7684 Fragment \u4E2D\u6CE8\u518C dataChannel\uFF0C\u5B83\u4EEC\u4F9D\u7136\u4F1A\u5728\u5F53\u524D Activity \u4E2D\u540C\u65F6\u88AB\u56DE\u8C03\u3002
\u5728\u6A21\u5757\u4E2D\uFF0C\u4F60\u53EF\u4EE5\u5728 Activity\u3001Application \u4EE5\u53CA Service \u7B49\u5730\u65B9\u4F7F\u7528 dataChannel\uFF0C\u5728 Activity \u4EE5\u5916\u7684\u5730\u65B9\u4F7F\u7528\u65F6\u6BCF\u4E2A\u56DE\u8C03\u4E8B\u4EF6\u90FD\u4F1A\u5373\u65F6\u56DE\u8C03\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u4F7F\u7528 ChannelPriority \u8FDB\u884C\u7BA1\u7406\u3002
\u82E5\u8981\u5728 Fragment \u4E2D\u4F7F\u7528 dataChannel\uFF0C\u8BF7\u4F7F\u7528 activity?.dataChannel(...)\u3002
\u5982\u679C\u4F60\u5E0C\u671B\u5728\u540C\u4E00\u4E2A Activity \u4E2D\u624B\u52A8\u8BBE\u7F6E\u6BCF\u4E2A\u56DE\u8C03\u4E8B\u4EF6\u7684\u54CD\u5E94\u4F18\u5148\u7EA7 (\u6761\u4EF6)\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 ChannelPriority
\u3002
\u4F8B\u5982\uFF0C\u4F60\u6B63\u5728\u4F7F\u7528\u4E00\u4E2A Activity \u7ED1\u5B9A\u591A\u4E2A Fragment \u7684\u60C5\u51B5\uFF0C\u8FD9\u5C06\u80FD\u591F\u89E3\u51B3\u8FD9\u4E2A\u95EE\u9898\u3002
\u793A\u4F8B\u5982\u4E0B
open class BaseFragment : Fragment() {
/** \u6807\u8BC6\u5F53\u524D Fragment \u5904\u4E8E onResume \u751F\u547D\u5468\u671F */
var isResume = false
override fun onResume() {
super.onResume()
isResume = true
}
override fun onPause() {
super.onPause()
isResume = false
}
override fun onStop() {
super.onStop()
isResume = false
}
}
class FragmentA : BaseFragment() {
// \u7701\u7565\u90E8\u5206\u88C5\u8F7D\u4EE3\u7801
// ...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// \u4F7F\u7528\u81EA\u5B9A\u4E49\u7684 isResume \u7ED3\u5408 isVisible \u6761\u4EF6\u5224\u65AD\u5F53\u524D Fragment \u6B63\u5904\u4E8E\u663E\u793A\u72B6\u6001
activity?.dataChannel(packageName = "com.example.demo1")
?.wait(key = "test_key", ChannelPriority { isResume && isVisible }) {
// Your code here.
}
}
}
class FragmentB : BaseFragment() {
// \u7701\u7565\u90E8\u5206\u88C5\u8F7D\u4EE3\u7801
// ...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// \u4F7F\u7528\u81EA\u5B9A\u4E49\u7684 isResume \u7ED3\u5408 isVisible \u6761\u4EF6\u5224\u65AD\u5F53\u524D Fragment \u6B63\u5904\u4E8E\u663E\u793A\u72B6\u6001
activity?.dataChannel(packageName = "com.example.demo2")
?.wait(key = "test_key", ChannelPriority { isResume && isVisible }) {
// Your code here.
}
}
}
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\uFF0C\u4F60\u53EA\u80FD\u63A5\u6536\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u53D1\u9001\u7684\u901A\u8BAF\u6570\u636E\u4E14\u53EA\u80FD\u53D1\u9001\u7ED9\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\uFF0C\u7CFB\u7EDF\u6846\u67B6\u9664\u5916\u3002
\u7279\u522B\u6CE8\u610F
\u4E3A\u4E86\u8FDB\u4E00\u6B65\u9632\u6B62\u5E7F\u64AD\u6EE5\u7528\uFF0C\u901A\u8BAF\u6570\u636E\u4E2D API \u4F1A\u81EA\u52A8\u6307\u5B9A\u5BBF\u4E3B\u548C\u6A21\u5757\u7684\u5305\u540D\uFF0C\u9632\u6B62\u5176\u5B83 APP \u76D1\u542C\u5E76\u5229\u7528\u5E7F\u64AD\u505A\u51FA\u8D85\u9650\u884C\u4E3A\u3002