有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java确保Android Studio构建不依赖于物理设备的缓存版本

TLDR

当我通过Android Studio在物理设备上部署应用程序时,如何确保它从头开始重建和推送所有内容,而不依赖物理设备上任何内容的任何缓存版本

我观察到奇怪的行为,可以通过清除物理设备的应用缓存或卸载来修复。这是一个解决方法,但不是修复方法。当我在Android Studio中“运行”(播放按钮)时,我希望我所做的所有更改都能反映在物理设备上的应用程序上,而无需手动卸载或清除手机缓存

Background

这个问题的原始标题是:

Input parameter changes value during inline debugger single step calling CameraBridgeViewBase.setMaxFrameSize

但是在这里把所有的东西都写进草稿之后,我发现了问题的原因,如何解决它,而不是如何永久解决它

当通过内联调试器进入方法时,我观察到方法的输入参数发生了变化

我正在使用OpenCV的安卓库并使用两个int值调用setMaxFrameSize()

mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.color_blob_detection_activity_surface_view);
mOpenCvCameraView.setMaxFrameSize(1000,1000);

我将这些int值从1000更新到200,然后再更新回1000,但是当进入CameraBridgeViewBase类时,它会恢复到200。这听起来很可笑,所以让我一步一步地说明我所做的事情:

  1. 对于setMaxFrameSize的每个输入参数,使用1000的值构建并运行代码。请注意,一切正常
  2. 对于setMaxFrameSize的每个输入参数,使用200的值构建并运行代码。请注意,一切正常。分辨率下降,帧速率上升
  3. 再次使用值1000构建并运行代码。请注意,分辨率仍然与之前设置的200值相匹配
  4. 在setMaxFrameSize方法调用处设置一个断点,并在定义内设置一个断点(即在CameraBridgeViewBase的本地副本内)
  5. 请注意,在CameraBridgeViewBase外部调用时,输入参数的值为1000,在CameraBridgeViewBase内部调用时,输入参数的值为200。认为这一定是缓存问题
  6. 清除缓存并重新启动Android Studio。重试内联调试器并查看相同的行为。该值设置为1000,但输入CameraBridgeViewBase后现在为200
  7. 手动删除模块和OpenCV库中的所有生成文件。从头开始重建。请重试内联调试。同样的问题依然存在
  8. 我想我可能有一个手表设置为200,所以我清除了我所有的手表,但问题仍然存在
  9. 我故意设置了maxWidth = 1000maxHeight = 1000的手表。这将覆盖200的值,I显示如所需
  10. 我清空手表,然后再试一次。在进入CameraBridgeViewBase时,值再次恢复为200
  11. 我在项目范围内对setMaxFrameSize进行文本搜索,认为其他线程正在调用它,当我进入调试器时,我看到了这一点。没有什么我还仔细检查了调试器中的线程名和堆栈跟踪,以验证我是否直接从调用mOpenCvCameraView.setMaxFrameSize(1000,1000);转到CameraBridgeViewBase中的setMaxFrameSize()方法
  12. 我做了一个WIPGIT提交,并将代码简化为一个最小的示例,并计划粘贴到这里。试图重建并运行,但发生了各种其他错误,导致我发现运行应用程序的物理手机上的应用程序缓存导致了所有这些问题

这是可以重复的。我可以通过步骤1到3,清除手机的应用缓存,问题就消失了。重复步骤1-3,它将返回。手机似乎保留了CameraBridgeViewBase的缓存版本,其中包含先前为maxHeightmaxWidth设置的值,但这只是基于我在内联调试器中观察到的推测


共 (0) 个答案