duangsuse::Echo
718 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
对象已经看完了, 继续调试
duangsuse::Echo
Photo
我选了款喜欢的 Atom 风格稿纸,又碰了好久断点 🌚
This media is not supported in your browser
VIEW IN TELEGRAM
不过这次有个好消息:
包含校验逻辑的 com.drakeet.purewriter.Ww.www 也 trap 了

> ## trace thread <1> main        (running suspended)
-- com.drakeet.purewriter.Ww.ww(Ljava/lang/CharSequence;IIIIIIII)Z:0
--
com.drakeet.purewriter.vz.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt
;)V:14
-- this=Lcom/drakeet/purewriter/vz; <830060797840>
-- snip --
-- android.view.Choreographer.doCallbacks(IJ)V:26
-- this=Landroid/view/Choreographer; <830055153504>
-- callbackType=2
-- frameTimeNanos=7066658945180
-- android.view.Choreographer.doFrame(JI)V:103
-- jitterNanos=171803079
-- this=Landroid/view/Choreographer; <830055153504>
-- frame=8435
-- startNanos=7066662763167
-- frameTimeNanos=7066658945180
-- android.view.Choreographer$FrameDisplayEventReceiver.run()V:9
-- this=Landroid/view/Choreographer$FrameDisplayEventReceiver; <830055158992>
-- android.os.Handler.handleCallback(Landroid/os/Message;)V:2
-- message=Landroid/os/Message; <830054730432>
-- android.os.Handler.dispatchMessage(Landroid/os/Message;)V:4
-- this=Landroid/view/Choreographer$FrameHandler; <830055153568>
-- msg=Landroid/os/Message; <830054730432>
-- android.os.Looper.loop()V:84
-- me=Landroid/os/Looper; <830053353696>
-- msg=Landroid/os/Message; <830054730432>
-- ident=43237435771745
-- logging=None
-- queue=Landroid/os/MessageQueue; <830053353728>
-- android.app.ActivityThread.main([Ljava/lang/String;)V:56
-- args=[]
-- thread=Landroid/app/ActivityThread; <830053353856>
-- java.lang.reflect.Method.invokeNative(Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Class;[Ljava/lang/Class;Ljava/lang/Class;
IZ)Ljava/lang/Object; <native>
-- java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;:17
-- this=Ljava/lang/reflect/Method; <830053348656>
-- args=([],)
-- receiver=None
-- com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()V:11
-- this=Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; <830053348816>
-- com.android.internal.os.ZygoteInit.main([Ljava/lang/String;)V:70
-- caller=Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; <830053348816>
-- argv=(#'com.android.internal.os.ZygoteInit', #'start-system-server')
-- dalvik.system.NativeStart.main([Ljava/lang/String;)V <native>


rt.
这说明我没冤枉 com.drakeet.purewriter.Ww.www, 它的确尝试了解包自身的信息
## trace thread <1> main        (running suspended)
-- com.drakeet.purewriter.Ww.www(Ljava/lang/CharSequence;IIIIIIII)Z <native>
-- com.drakeet.purewriter.Ww.ww(Ljava/lang/CharSequence;IIIIIIII)Z:4
包含了行间距算法位置相关信息
## trace thread <1> main        (running suspended)
-- com.drakeet.purewriter.Ww.www(Ljava/lang/CharSequence;IIIIIIII)Z <native>
-- com.drakeet.purewriter.Ww.ww(Ljava/lang/CharSequence;IIIIIIII)Z:4


(caller)
com.drakeet.purewriter.vz.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt
;)V:14
   -- java.lang.Thread.run()V:6
-- this=Lcom/drakeet/purewriter/ald$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww; <830055181040>

>> inspect 830055181040
## object <830055181040> Lcom/drakeet/purewriter/ald$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww; in thread <25> RxSingleScheduler-1
(waiting suspended)
   -- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/Pac
kageInfo;:6
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Z:1
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;)Z:4
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/Xxxxx;)V:0
-- com.drakeet.purewriter.to.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()V:2
-- com.drakeet.purewriter.aiw.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/ago;)V:9
-- this=Lcom/drakeet/purewriter/aiw; <830060197552>
-- com.drakeet.purewriter.agm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/ago;)V:9
-- this=Lcom/drakeet/purewriter/aiw; <830060197552>
-- com.drakeet.purewriter.aiy$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.run()V:2
-- this=Lcom/drakeet/purewriter/aiy$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww; <830063701456>
-- com.drakeet.purewriter.alf.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()Ljava/lang/Void;:9

从调用堆上截取下的部分,最后调用了 getPackageInfo()
题外话:
试用一下,这真是目前为止我见过 Android 上做得最用心的字处理器了
This media is not supported in your browser
VIEW IN TELEGRAM
真心不错
甚至比 Atom 还用心(
我刚才尝试在时光机里访问历史记录,drakeet 又来检查盗版了(🤣
这次还弹了窗

>> ## trace thread <25> RxSingleScheduler-1        (running suspended)
-- android.content.pm.PackageInfo.<init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo$1;)V:0
-- this=Landroid/content/pm/PackageInfo; <830058655392>
-- x0=Landroid/os/Parcel; <830063643872>
-- x1=None
-- snip --
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/Pac
kageInfo;:6
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Z:1
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;)Z:4
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/Xxxxx;)V:0
-- com.drakeet.purewriter.to.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()V:2
-- com.drakeet.purewriter.aiw.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/ago;)V:9
-- this=Lcom/drakeet/purewriter/aiw; <830055555088>
-- com.drakeet.purewriter.agm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/ago;)V:9
-- this=Lcom/drakeet/purewriter/aiw; <830055555088>
-- com.drakeet.purewriter.aiy$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.run()V:2
-- this=Lcom/drakeet/purewriter/aiy$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww; <830058653504>
-- com.drakeet.purewriter.alf.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()Ljava/lang/Void;:9
-- this=Lcom/drakeet/purewriter/alf; <830058654208>
-- com.drakeet.purewriter.alf.call()Ljava/lang/Object;:0
-- this=Lcom/drakeet/purewriter/alf; <830058654208>


第二次:(内容几乎一样我删了)
如果我不知道弹出窗口的逻辑,这次显然是白来
我想去问个问题 — 弹出窗口应该使用了哪些类
然后直接往 call stack 上抓现行 😅