ARTICLE · 1081514
装不上的安装包,和它的四个坑
先说说这是个什么东西。
手机屏幕边上蹲着一个悬浮球,双击它,页面就开始自己往下走。你看长文章、翻资料的时候,手指不用一直划,可以歇着。球还能拖着跑,点一下弹出小面板,能调快慢、能开关。
这是我做的第一个安卓 App。起因特别朴素:躺床上看东西的时候,手指要一直划,划到手酸。
市面上现成的工具不少,但要么不好用,要么不顺眼。我一合计,与其将就,不如自己搓一个——反正界面长什么样、功能怎么排,全由我说了算。
想法很朴素。做起来才知道,坑一个接一个。
而且我不会安卓开发。一行代码都没写过那种。
我的做法是:我提需求、我试用、我挑毛病,AI 负责写代码和排查。我是那个不断说“不对,再改”的人,它是那个从不嫌烦的人。
七天之后功能全好了。我以为到此为止了。
结果这个包,装不上。
坑一:一个装不上的安装包
手机上就一行字:解析包时出现问题。
没有原因,没有日志,没有哪里不对的提示。我点安装,它弹回来;卸载重装,它还是弹回来。
我把文件从 QQ 传到手机、存到本地、换个方式再传,全试了一遍,结果一模一样。同一个手机、同一种传法,之前的包都能装,就这个不行。
所以问题不在手机,不在线,也不在传法。问题在这个包里面。
一个安装包里塞着图标、界面、代码、签名,几万行东西。在这么大一堆里找一根针,靠猜是猜不出来的。
我用了个笨办法:做减法。
先打一个只有一行字的极简包——能装。把完整的东西全塞回去——不能装。那真凶就在这两者之间。
然后一半一半地切。切成两包,A 能装、B 不能装,就把 B 再切一半;再切,再试。这跟猜数字是同一个道理:你不用从 1 数到 100,每次只问“大了还是小了”,七次之内必中。
十几轮下来,最后剩下的,是一个谁都看不上眼的小东西:
应用图标。
我用的是代码画的一个图形图标,方方正正,看着挺规整。改成一张 PNG 图片——立刻装上了。
后来才知道,有些国产安卓系统对“代码画的图标”会直接拒收,而且不告诉你原因。它就让你盯着那行“解析包时出现问题”,自己想办法。
这次学到的东西比代码本身值钱:当系统只说“不行”、却不说“哪里不行”的时候,最快的办法不是猜,是把变量一个个拿掉,逼它自己开口。
坑二:工具不让过,就绕过去
装能装了,但每次改完还得重新打包。这时候第二个坑来了。
做安卓应用有一套正规工具,点一下就能把代码编译成安装包。但在我电脑上,它被杀毒软件锁住了——每一步都被拦,试了半天没辙。
跟它较劲显然不划算。我选了另一条路:绕过去。
把编译、打包、对齐、签名这一整套流程,拆成命令行里的一条条指令,手工串起来。一共八步,写成脚本,跑一遍就出安装包。虽然土,但管用,而且从那以后再没被拦过。
这件事的教训很实在:工具不让你过的时候,你不一定要跟它硬碰。绕过去常常更快,而且绕一次,往后再也不受它管。
坑三:一个飞不远的鸡蛋
工具顺了之后,我开始琢磨好玩的部分。屏幕边上那个悬浮球,我给它换成了鸡爪的图案;双击它,会有鸡蛋从爪尖“嗖”地射出去,一边飞一边翻跟头。
第一版做出来,一试:鸡蛋飞得太短了,还没看清就没了。
我的第一反应是距离算错了。查了一遍,没问题;又怀疑是屏幕高度取错了,改了,还是短。
第二反应是透明度——鸡蛋飞到一半开始变淡,看着就像提前消失了。把淡出去掉,让它实心飞。还是短。
前后改了三版,都没用。
那几天我一直在“鸡蛋”身上找原因——它飞多快、淡不淡、往哪儿飞。直到停下来重新看这件事,才看见真正的荒唐之处:
我给鸡蛋做的那个“窗口”,只有鸡蛋那么大。
鸡蛋是在这个窗口里面移动的。它一挪出窗口边缘,就被系统直接裁掉了。就像你在一个火柴盒里推一颗玻璃珠,珠子一滚出盒子边,就掉进桌缝里不见了。
跟我算的距离、跟屏幕有多大、跟淡不淡出,一点关系都没有。
改法其实很简单:给鸡蛋换一个全屏的“舞台”,让它在舞台里随便飞。改完,鸡蛋利落地飞了出去。
这个坑教会我一件事:东西“动不了”的时候,先看看装它的盒子有多大,再看它走了多远。
坑四:一个旋钮解决的事
最后是速度。我觉得太快了,让 AI 把 1 到 10 档全部降到原来的四分之一。改完一试,还是不对;又调,调来调去怎么都不顺手。
原因是我一直没搞明白一件事:这个 App 有两套完全不同的滚动方式。
一套是系统级的节点滚动,快慢只跟“多久滚一次”有关;另一套是模拟手指滑动,快慢还跟“手指划一次要多久”有关。
我只改了其中一处,另一处纹丝不动,手感当然对不上。
后来我们把它们抽成了一个数字——速度系数。想快想慢,就改这一个数,两处跟着一起动。从那以后调速度,就是一句话的事。
回头看
回头看这四个坑,其实没有一个是“代码写错了”。
图标那次,代码完全正确,是系统的规矩不认它。打包那次,工具没坏,是它不让我用。鸡蛋那次,距离算得一点没错,是盒子太小。速度那次,公式也没毛病,是我只改了一半。
四个坑里,没有一个是靠“更聪明”填上的,全是靠“看得更全一点”。
至于 AI 在里面扮演什么角色——它不替我做决定,但它能在我说“鸡蛋飞不远”的时候,陪我把“距离、透明度、屏幕高度、窗口大小”这几种可能一个个摊开,逐个排除。
真正卡住人的,从来不是不会写那行代码。是出事的时候,不知道该怀疑谁。
现在这个 App 在我手机上跑着,双击那个鸡爪,会有鸡蛋翻着跟头飞出去。
文中提到的工具仅在本人设备上使用,由使用者手动开启,不涉及任何第三方账号,也不采集任何数据。