解决AndroidStudio4.2.1修改代码运行没变化没生效的问题-Xposed插件重载

Posted SkyHandCsdn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决AndroidStudio4.2.1修改代码运行没变化没生效的问题-Xposed插件重载相关的知识,希望对你有一定的参考价值。

一、 简介

更新了androidStudio4.2.1之后出现了一个问题:改了代码之后点击运行,发现运行起来的app是我没改之前的代码。

例如我开始写了一个打印Log.e("@@","测试打印"),运行app之后是正常打印,然后我又加了一句打印,运行app,发现新加的打印并没有打印。

此文章记录一下解决问题的思路以及结果。

二、尝试发现问题

2.1 搜索

遇到问题找度娘,搜了一圈AndroidStudio改代码运行没变化相关的,发现没有相关的问题或者文章,有相关的都是就版本的InstantRun问题。
百度搜索结果

2.2 InstantRun

考虑是不是Instant Run的问题,但是Instant Run已经在AndroidStudio3.5废弃了,改成了ApplyChange,但是我点的运行是Run 'App', 所以这个应该没关系。

但是我又发现了一个hot-swap,但是关掉也是没效果的
在这里插入图片描述

2.3 Apk是否包含新代码

然后我看看反编译Runapp出来的apk,看看里面有没有包含我改动的代码,默认apk在目录:app/outpus/apk/debug/app-deubg.apk,发现改的代码已经在安装包里面了!!! 第一个包我加了一个测试打印,改动代码是添加了测试打印xxxxxxx。 这里就可以判断跟打包没关系了,因为新改动的代码已经是被打包的了
反编译之后的代码
没有显示添加的打印

2.4 手动安装

正常点击AS的运行,是as帮忙做好的了 打包apk-安装-运行 这几个步骤,上一步发现了打包是没问题的,那我手动安装试试呢?
于是我手动利用了adb命令进行安装(安装debug包需要加-t参数):
命令行安装
然后手动点击运行,发现居然正常了,新加的打印出来了!!!!
第二局测试打印出来了

2.5 AS的Run

根据上面的一系列猜测,就是在as里面运行的时候,打包了,但是没有安装到手机上,然后继续运行了旧的app。

然后我把目光放到Run的过程,对比正常和不正常的情况打印的Run日志是否有异常。

下面的图是异常的,没有第二条Log打印:
这个图是异常

下面的这图是正常的,打印了两条的:
在这里插入图片描述

对比发现,没啥区别。。。。。。

2.6 换个手机

由上面的总结,得知目前是安装的问题,我一直用的小米,于是我用另一台手机(魅族16Plus)来测试,最终测试结果: 这个魅族手机正常。。。。

三、小结

到了目前,貌似是我手机的问题。

最终发现,是我写的是Xposed插件问题,然后我装的是面具magisk
+LSPosed,由于Xposed的hook的影响才出现了这个问题。。。。。

四、解决Xposed插件实时更新

解决办法就是让app的版本号增加,就会让Xposed重新加载插件。

那怎么做呢? 总不能运行前每次都去build.gradle手动+1然后AsyncGradle吧? 办法来了,利用脚本实现自动加+1。

4.1 添加版本号记录文件

在app这个module下创建文件 version.properties,用来记录当前的版本号,内容为:

versionCode=0

4.2 添加getVersionCode

在app这个module的build.gradle里面添加getVersionCode方法,从上面的文件获取版本号,并且+1保存,然后返回。

def getVersionCode() {
    def propsFile = file('version.properties')
    def properties = new Properties()
    properties.load(new FileInputStream(propsFile))
    def vCode = properties['versionCode'].toInteger()
    properties['versionCode'] = (++vCode).toString()
    properties.store(propsFile.newWriter(), null)
    return vCode
}

4.3 设置版本号

最后在android里面定义一个变量来保存上个方法+1得到的版本号,然后设置到defaultConfig里面的verseionCode。 这样子每次点击运行的时候,打包apk的版本号都会进行+1。 这样子就可以实时实现插件重载。
在这里插入图片描述

以上是关于解决AndroidStudio4.2.1修改代码运行没变化没生效的问题-Xposed插件重载的主要内容,如果未能解决你的问题,请参考以下文章

解决AndroidStudio修改代码运行没变化没生效的问题-Xposed插件重载

Android Studio 4.2.1 启动时出现 NullPointer 异常

Android Studio 4.2 开始在发布版本中重命名 APK 内的资源

自动化运维能否解决系统代码级问题?

Android Studio 调试器进程以退出代码 127 完成

系统运维系列 之java.lang.NullPointerException出现原因研究和解决方案分析