- 问题背景
- 解决方法
- 总结
阅读之前注意:
本文阅读建议用时:10min
问题背景
需求非常简单,一款挺早的音乐播放器——索尼NW-ZX1,其自带的音乐播放程序,竟然没有定时器的功能,于是尝试添加定时停止播放功能。
解决方法
首先要拿到对应的apk文件。参考之前的Android获取当前应用的apk。未做任何修改的情况下,发现直接adb install xxx.apk到我的一台安卓测试真机,提示xxxx-1/base.apk code is missing。
搜索知道是缺少对应的odex文件。
参考Android odex文件反编译,先用adb拉取了对应的odex文件,然后反编译为classes.dex。
再参考Android如何修改classes.dex文件后重新放入apk中,把classes.dex加入到了apk中。这次adb install xxx.apk到测试真机,提示是设备缺少一个支持库。如果是adb install xxx.apk到原NW-ZX1,则提示Failure [INSTALL_FAILED_ALREADY_EXISTS]
,也就是已经安装了,无法安装同名的。
此时参考APK包名修改,再次安装到NW-ZX1,还是提示已经安装,可能某个地方没改,待我继续研究下。
apk包名修改完成了,值得注意的是:AndroidManifest.xml中只修改package name,即"com.sony.walkman.mediaplayers.wm2"->com.sony.walkman.mediaplayers.xm2cc,然后在smali文件夹中修改 路径名,即com/sony/walkman/mediaplayers/wm2->com/sony/walkman/mediaplayers/xm2cc,最后,在res文件夹中同样修改package name。
但是上面的方法有地方处理的不正确,导致安装后打开会闪退,模拟器是提示缺少设备支持库,而NW-ZX1则是提示路径修改不正确。
后来,找到了另一个 工具。参考APK 包名修改工具则可以得到新包,并且安装后不会闪退。
经过apktool反编译,修改了smali代码。目前已经完成自动停止播放的功能。见下图:
总结
用对工具,一切都是水到渠成。
如果本文对你有帮助,不如请我一罐可乐吧 🍺