代码中有jacoco单元测试覆盖率检查是,无法使用
- Dominant language
- C++
- Stars
- 7k
- Forks
- 1.6k
- PR merge metrics
- No merged PRs in 30d
Description
Crash日志如下:提示Final field cannot be written
``` java
java.lang.IllegalAccessError: Final field 'com.myapp.Myapp.$jacocoData' cannot be written to by method 'boolean[] com.myapp.Myapp_CF.$jacocoInit()' (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)
at com.myapp.Myapp_CF.$jacocoInit(Myapp.java)
at com.myapp.Myapp.(Myapp.java)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1572)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
```
生成的patch的smali文件如下:
``` smali
# static fields
.field private static final transient synthetic $jacocoData:[Z = null
```
``` smali
# direct methods
.method private static synthetic $jacocoInit()[Z
.locals 4
.annotation runtime Lcom/alipay/euler/andfix/annotation/MethodReplace;
clazz = "com.myapp.Myapp"
method = "$jacocoInit"
.end annotation
sget-object v0, Lcom/myapp/Myapp;->$jacocoData:[Z
if-nez v0, :cond_0
const-wide v0, 0x28846709982acfa1L
const-string/jumbo v2, "com/myapp/Myapp"
const/16 v3, 0xf7
invoke-static {v0, v1, v2, v3}, Lorg/jacoco/agent/rt/internal_773e439/Offline;->getProbes(JLjava/lang/String;I)[Z
move-result-object v0
sput-object v0, Lcom/myapp/Myapp;->$jacocoData:[Z
:cond_0
return-object v0
.end method
```
是否有解决方案,是否只针对jacoco,如果自己写类似的静态final对象引用某个静态方法,是否也不能支持?
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the generated Myapp.smali and the $jacocoInit method annotated with AndFix MethodReplace; trace the final $jacocoData field access and Offline->getProbes call. Reproduce the crash from the reported stack trace, then determine whether AndFix's method replacement supports this JaCoCo-generated pattern and whether equivalent static final references behave the same. Done means a verified compatibility fix or a documented limitation with a regression check.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, java
- Domain
- mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100