6 通通通通仨呼噜 9小时前 148次点击
用户要求用标准Intent方式,借系统默认浏览器打开链接。我会重写lambda方法,将其中所有统计逻辑移除。我会使用标准Intent.ACTION_VIEW方式打开URL,添加FLAG_ACTIVITY_NEW_TASK标志,再用try-catch捕获异常,避免崩溃,返回true表示处理点击事件。之后,我将替换lambda方法体,按获取Context、创建Intent、设置URL、添加FLAG_ACTIVITY_NEW_TASK步骤修改。我需要在smali中实现启动Activity、用try-catch包裹及返回true的功能。先确定使用的寄存器,方法有.locals 1,即一个局部变量v0,但可能需更多对象,考虑增加.locals数量,不过为简单起见,我会尽量少用寄存器,思考v0可存储Context、Intent或Uri等对象,最终决定如何编写该方法。我将在smali中实现特定方法,该方法需获取Context对象,后续还会创建Intent,为打开链接做准备。我会先创建一个新的Intent实例,将动作设为“android.intent.action.VIEW”。接着,设置Uri为指定链接,为打开链接做准备。我会先调用静态方法将链接字符串解析为Uri对象,并将结果存入寄存器v2。接着,调用Intent的setData方法,将v2作为参数设置给Intent,为打开链接做准备。之后,定义一个常量v2为0x1000,调用Intent的addFlags方法,添加FLAG_ACTIVITY_NEW_TASK标志。最后,调用Context的startActivity方法,启动Activity打开链接,并在try-catch结构中处理异常。我注意到FLAG_ACTIVITY_NEW_TASK值为0x10000000,而const/high16 v2, 0x1000是将0x1000左移16位,即v2 = 0x1000 << 16 = 0x10000000,等价于FLAG_ACTIVITY_NEW_TASK。此外,我还需确保URL与用户提供的一致。我会将.locals从1改为3,因使用了v0、v1、v2三个寄存器。我计划用Python脚本读取文件,找到对应方法并替换其内容。
本楼来自:我的世界肝帝玩家的资源库,可以进来看看