Status Update
Comments
gg...@google.com <gg...@google.com>
gg...@google.com <gg...@google.com> #2
First of all thanks for this detailed issue.
This issue had been investigated thoroughly when it was first reported internally. The surprising detail in this report is that the issue is not reproducible before 1.7
. I will look into this.
The main problem with POBox is the fact that it is deprecated. Since 2021 Sony has been shipping new Xperia devices with Gboard pre-installed. Although we are aware that there is still a considerable amount of users still using POBox, the described behavior is caused by POBox's noncompliant behavior with InputConnection
and InputMethodManager
documentation. However, this is understandable since TextView
implementation was also not respecting the behavior that is expected from Editors.
Ultimately we have decided to enforce the documented behavior with specifically regards to when editors should call InputMethodManager.updateSelection
. Also, although unconfirmed, there were traces of possible custom code being included in Sony OEM images that changed how InputMethodManager was notified from TextView. If POBox also depended on something like this, it would be impossible for Compose code to replicate the same unknown behavior.
[Deleted User] <[Deleted User]> #3
Or is that option not available?
Even if the root cause is POBox, from the perspective of the app's customers, it looks like an app bug, so this issue is a blocker against updating Jetpack Compose.
ay...@blink22.com <ay...@blink22.com> #4
Just to be sure, it is dangerous to replace Compose TextField with Android View EditText as a workaround for this issue.
Compose 1.7 has a bug that causes ANR when the focus is on EditText.
Another View-related bug in Compose 1.7 is that an Android View is focused by calling FocusManager.clearFocus().
Perhaps there is a lack of testing of Compose 1.7 in combination with Android View. There is also a possibility that there are other fatal bugs related to View.
In other words, the only options for apps targeting the Japanese market that require POBox support are to continue using Compose 1.6 or to use EditText in combination with various workarounds.
be...@gmail.com <be...@gmail.com> #5
Project: platform/frameworks/support
Branch: androidx-main
Author: Halil Ozercan <
Link:
Fix POBox keyboard issue
Expand for full commit details
Fix POBox keyboard issue
Fix: 373743376
Fix: 329209241
Test: NullableInputConnectionWrapperTest
Change-Id: I94e0e598274fb88b255f977f9fbd50dfbbb1ecb1
Files:
- M
compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/text/input/NullableInputConnectionWrapperTest.kt
- M
compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/NullableInputConnectionWrapper.android.kt
Hash: 57f58c4b80d5d8470b2aca325dfdcd55f235231e
Date: Thu Oct 24 01:25:20 2024
so...@gmail.com <so...@gmail.com> #6
Many thanks again for this report. Especially for giving us a huge clue in terms of what could be going wrong. The fix is now merged and I will ask for a cherry-pick into a stable release.
ga...@google.com <ga...@google.com> #7
Do you have any concrete plan to cherry-pick the fix into current stable version (1.7.x)? We are currently waiting it.
nk...@google.com <nk...@google.com> #8
Yes, this fix is planned to be included in a future 1.7.x
release.
ay...@blink22.com <ay...@blink22.com> #9
Thanks for the fix. Sorry to follow up on this. is it possible for you to share specific release version/date for the stable version? We are waiting on this to decide on our direction.
nk...@google.com <nk...@google.com>
ju...@gmail.com <ju...@gmail.com> #10
nk...@google.com <nk...@google.com> #11
nk...@google.com <nk...@google.com> #12
[Deleted User] <[Deleted User]> #13
Is that right?
nk...@google.com <nk...@google.com> #14
The Android Studio/Gradle team and the Firebase team will need to adopt this fix in order to make the integration with their respective tools work. I will leave it up to them to provide an estimate on when that's going to be ready.
ga...@google.com <ga...@google.com>
[Deleted User] <[Deleted User]> #15
Sample
./gradlew jacocoTestReport
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
Parallel execution is an incubating feature.
Starting 0 tests on Pixel 2 - 8.1.0
Tests on Pixel 2 - 8.1.0 failed: Instrumentation run failed due to 'Process crashed.'
com.android.builder.testing.ConnectedDevice > No tests found.[Pixel 2 - 8.1.0] FAILED
No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don't inherit from TestCase or lack @Test annotations).
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:connectedDebugAndroidTest'.
> There were failing tests. See the report at: {}/unified-code-coverage-android/app/build/reports/androidTests/connected/index.html
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at
BUILD FAILED in 25s
ga...@google.com <ga...@google.com> #16
ga...@google.com <ga...@google.com> #17
Fixed in ag/Ib7377ad308b266fb79c753a859c4bf75d43e029f
co...@gmail.com <co...@gmail.com> #18
---------------
static String addTestCoverageSupport(Bundle bundle, String str) {
if (!shouldRunCoverage(bundle) || !runsInIsolatedMode(bundle)) {
return null;
}
String string = bundle.getString("coverageFilePath");
if (string == null || string.isEmpty()) {
throw new IllegalStateException(String.format("The coverage path [%s] is either null or empty", new Object[]{string}));
} else if (bundle.getString("coverageFile") == null) {
return new StringBuilder((String.valueOf(string).length() + 3) + String.valueOf(str).length()).append(string).append(str).append(".ec").toString();
} else {
throw new IllegalStateException(String.format("Can't use a custom coverage file name [-e %s %s] when running through orchestrator in isolated mode. Since the generated coverage files will overwrite each other. Please consider using [%s] instead.", new Object[]{"coverageFile", bundle.getString("coverageFile"), "coverageFilePath"}));
}
}
---------------
Throws an ISE exception if it does not find the coverageFilePath. Is this caused by the fact that no such parameter is specified when executing:
---------------
V/ddms: execute: running CLASSPATH=$(pm path android.support.test.services) app_process / android.support.test.services.shellexecutor.ShellMain am instrument -r -w -e targetInstrumentation com.jpmorgan.am.ipbonline.instr.test/android.support.test.runner.AndroidJUnitRunner -e coverageFile /data/data/com.jpmorgan.am.ipbonline.instr/
---------------
I just want to confirm if this is the cause of the process crash 'Instrumentation run failed due to 'Process crashed'.'
sl...@google.com <sl...@google.com> #19
is...@gmail.com <is...@gmail.com> #20
do...@gmail.com <do...@gmail.com> #21
So I changed the orchestrator to 1.0.2 (did not make any changes in the test cases). Gradle can sync but when I tried to generate the report with "createDebugAndroidTestCoverageReport" task, it said "com.android.builder.testing.ConnectedDevice > No tests found"
So in short, if I used an older version of orchestrator, the report returned wrong result
If i used a new version of orchestrator, it has error.
Does anyone have the similar issue? Is that orchestrator 1.0.2 still a little bit buggy or I missed something?
Thanks.
ga...@google.com <ga...@google.com> #22
do...@gmail.com <do...@gmail.com> #23
I cannot find a fix yet. Any other suggestions?
Thanks.
ga...@google.com <ga...@google.com> #24
do...@gmail.com <do...@gmail.com> #25
If I use orchestrator:1.0.1 (line 112), I can run the test cases with the tasks "createProductionDebugCoverageReport" (./gradlew createProductionDebugCoverageReport).
If I use orchestrator:1.0.2 without changing anything in the test cases, it throws me an error as I mentioned before.
Let me know if you need more information.
ga...@google.com <ga...@google.com> #26
do...@gmail.com <do...@gmail.com> #27
It fixed this problem but had a different problem. I will open a new post if I don't find a fix for that.
Thanks man.
sh...@gmail.com <sh...@gmail.com> #28
I have used: gradle: 3.2.0-alpha17, test:runner: 1.0.2
distributionUrl=https\://
testInstrumentationRunnerArguments clearPackageData: 'true'
execution 'ANDROID_TEST_ORCHESTRATOR'
androidTestUtil 'com.android.support.test:orchestrator:1.0.1'
Jacaoco setup -
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
fileFilter ="***"
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*
----
allprojects {
apply plugin: "jacoco"
jacoco {
toolVersion = "0.8.0"
}
-----
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-alpha17'
classpath "org.jacoco:org.jacoco.core:0.8.0"
-----
I am getting the Following Error
C:\Development\Projects\BreathMapper\Workspace\Source\BreatheMapper\app\libs\adobeMobileLibrary-4.13.5.jar
Warning:Type `com.google.android.gms.wearable.PutDataMapRequest` was not found, it is required for default or static interface methods desugaring of `void com.adobe.mobile.ConfigSynchronizer.syncData(java.lang.String, com.google.android.gms.wearable.DataMap)`
Warning:Type `com.google.android.gms.wearable.DataMapItem` was not found, it is required for default or static interface methods desugaring of `void com.adobe.mobile.ConfigSynchronizer.restoreConfig(com.google.android.gms.wearable.DataItem)`
Warning:Type `com.google.android.gms.wearable.PutDataMapRequest` was not found, it is required for default or static interface methods desugaring of `com.adobe.mobile.WearableDataResponse com.adobe.mobile.WearableDataConnection.send(com.adobe.mobile.WearableDataRequest)`
Warning:Type `com.google.android.gms.wearable.DataMapItem` was not found, it is required for default or static interface methods desugaring of `void com.adobe.mobile.WearableDataConnection.onDataChanged(com.google.android.gms.wearable.DataEventBuffer)`
Warning:Type `com.google.android.gms.wearable.Asset` was not found, it is required for default or static interface methods desugaring of `com.google.android.gms.wearable.DataMap com.adobe.mobile.WearableDataRequest$Cache.handle(android.content.Context)`
Warning:Interface `com.google.android.gms.common.api.GoogleApiClient$OnConnectionFailedListener` not found. It's needed to make sure desugaring of `com.adobe.mobile.WearableDataConnection` is correct. Desugaring will assume that this interface has no default method.
Warning:Interface `com.google.android.gms.wearable.DataApi$DataListener` not found. It's needed to make sure desugaring of `com.adobe.mobile.WearableDataConnection` is correct. Desugaring will assume that this interface has no default method.
C:\Users\xx\.gradle\caches\transforms-1\files-1.1\runtime-1.1.1.aar\be15bb0ad7b260a4de5c6f23e94be8e7\jars\classes.jar
Warning:Type `android.arch.paging.PositionalDataSource` was not found, it is required for default or static interface methods desugaring of `boolean android.arch.persistence.room.paging.LimitOffsetDataSource.isInvalid()`
C:\Users\xx\.gradle\caches\transforms-1\files-1.1\espresso-core-3.0.2.aar\f93273e747e9ce9e35d6f1173bb60539\jars\classes.jar
Warning:Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `sun.misc.Unsafe android.support.test.espresso.core.internal.deps.guava.cache.Striped64.getUnsafe()`
Warning:Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `void android.support.test.espresso.core.internal.deps.guava.util.concurrent.AbstractFuture$UnsafeAtomicHelper.<clinit>()`
Error:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 warning
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:createDebugAndroidTestCoverageReport'.
> java.io.IOException: No coverage data to process in directory 'C:\Development\Projects\BreathMapper\Workspace\Source\BreatheMapper\app\build\outputs\code-coverage\connected'
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at
BUILD FAILED in 4m 56s
ga...@google.com <ga...@google.com> #29
Can you please file a new issue, and upload a sample project that reproduces it?
sh...@gmail.com <sh...@gmail.com> #30
Full Error log
C:\Development\Projects\MyTest\Workspace\Source\MyTest\app\build\outputs\androidTest-results\connected\TEST-Galaxy_Nexus_API_26(AVD) - 8.0.0-app-.xml. Total tests 48, passed 48,
06:04:55 V/ddms: execute 'CLASSPATH=$(pm path android.support.test.services) app_process / android.support.test.services.shellexecutor.ShellMain am instrument -r -w -e targetInstrumentation com.vn.test.test/android.support.test.runner.AndroidJUnitRunner --no_window_animation -e coverageFilePath /data/data/com.vn.test/coverage_data/ -e coverage true android.support.test.orchestrator/android.support.test.orchestrator.AndroidTestOrchestrator' on 'emulator-5556' : EOF hit. Read: -1
06:04:55 V/ddms: execute: returning
06:04:55 V/ddms: execute: running echo 'for i in $(run-as com.vn.test ls /data/data/com.vn.test/coverage_data/); do run-as com.vn.test cat /data/data/com.vn.test/coverage_data/$i > /data/local/tmp/com.vn.test-coverage_data/$i; done' > /data/local/tmp/com.vn.test-coverage_data/copyFromUser.sh
06:04:55 V/ddms: execute 'echo 'for i in $(run-as com.vn.test ls /data/data/com.vn.test/coverage_data/); do run-as com.vn.test cat /data/data/com.vn.test/coverage_data/$i > /data/local/tmp/com.vn.test-coverage_data/$i; done' > /data/local/tmp/com.vn.test-coverage_data/copyFromUser.sh' on 'emulator-5556' : EOF hit. Read: -1
06:04:55 V/ddms: execute: returning
06:04:55 V/ddms: execute: running sh /data/local/tmp/com.vn.test-coverage_data/copyFromUser.sh
06:04:55 V/ddms: execute 'sh /data/local/tmp/com.vn.test-coverage_data/copyFromUser.sh' on 'emulator-5556' : EOF hit. Read: -1
06:04:55 V/ddms: execute: returning
06:04:55 V/ddms: execute: running ls /data/local/tmp/com.vn.test-coverage_data > /data/local/tmp/com.vn.test-coverage_data/paths.txt
06:04:55 V/ddms: execute 'ls /data/local/tmp/com.vn.test-coverage_data > /data/local/tmp/com.vn.test-coverage_data/paths.txt' on 'emulator-5556' : EOF hit. Read: -1
06:04:55 V/ddms: execute: returning
06:04:55 D/paths.txt: Downloading paths.txt from device 'emulator-5556'
06:04:55 D/Device: Downloading file from device 'emulator-5556'
06:04:55 V/ddms: execute: running rm -r /data/local/tmp/com.vn.test-coverage_data
06:04:55 V/ddms: execute 'rm -r /data/local/tmp/com.vn.test-coverage_data' on 'emulator-5556' : EOF hit. Read: -1
06:04:55 V/ddms: execute: returning
06:04:55 V/ddms: execute: running pm uninstall com.vn.test.test
06:04:55 V/ddms: execute 'pm uninstall com.vn.test.test' on 'emulator-5556' : EOF hit. Read: -1
06:04:55 V/ddms: execute: returning
06:04:55 V/ddms: execute: running pm uninstall com.vn.test
06:04:56 V/ddms: execute 'pm uninstall com.vn.test' on 'emulator-5556' : EOF hit. Read: -1
06:04:56 V/ddms: execute: returning
:app:createDebugAndroidTestCoverageReport FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:createDebugAndroidTestCoverageReport'.
> java.io.IOException: No coverage data to process in directory 'C:\Development\Projects\MyTest\Workspace\Source\Test\app\build\outputs\code-coverage\connected'
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at
BUILD FAILED in 3m 14s
sh...@gmail.com <sh...@gmail.com> #31
I have uploaded some more log detail.
sh...@gmail.com <sh...@gmail.com> #32
My setup was working fine with earlier gradle plugin 3.1.2 . with distributionUrl=gradle-4.4-all.zip (.ec file was generating but only coverage data is incomplete ).
But I tried to implement the solution provided in #20
gradle plugin - gradle:3.2.0-alpha17' with distributionUrl=gradle-4.6-all.zip But getting #30 error an .ec file not generating
ga...@google.com <ga...@google.com> #33
ba...@gmail.com <ba...@gmail.com> #35
How to test the private methods and greendao database CRUD operations in android robolectric test case.
How to get private method code coverage in android jacoco library using
sl...@gmail.com <sl...@gmail.com> #36
> java.io.IOException: No coverage data to process in directories [[/Users/msh/git/wine-scanner-android/app/build/outputs/code_coverage/worldDebugAndroidTest/connected]]
Only happens when enabling ANDROIDX_TEST_ORCHESTRATOR
ga...@google.com <ga...@google.com> #37
Can you please share a project the reproduces the issue?
sl...@gmail.com <sl...@gmail.com> #38
I've tried trouble shooting most of the day and so far no luck. I really have no idea where to start looking.
Not sure if it will help but the complete output when running ./gradlew createWorldDebugCoverageReport is attached.
I've tried against an emulator (genymotion) as well as a real device - same result.
I guess the next logical step is to setup a basic project and see if that has the same problem...
ga...@google.com <ga...@google.com> #39
bi...@gmail.com <bi...@gmail.com> #40
Still error
Execution failed for task ':app:createDebugAndroidTestCoverageReport'.
> java.io.IOException: No coverage data to process in directories /app/build/outputs/code_coverage/debugAndroidTest/connected
sl...@gmail.com <sl...@gmail.com> #41
az...@gmail.com <az...@gmail.com> #42
> Caused by: org.gradle.api.UncheckedIOException: java.io.IOException: No coverage data to process in directories [[/Users/azizbekian/Projects/XXX/XXX/app/build/outputs/code_coverage/devDebugAndroidTest/connected]]
Using `androidTestUtil androidx.test:orchestrator:1.2.0`
AGP version 3.4.2
Gradle version 5.5
Have specified `testInstrumentationRunnerArguments clearPackageData: 'true'` in `defaultConfig` DSL
Have specified `execution 'ANDROIDX_TEST_ORCHESTRATOR'` in testOptions DSL
Problem is, that I cannot see `
an...@gmail.com <an...@gmail.com> #43
bj...@googlemail.com <bj...@googlemail.com> #44
ma...@gmail.com <ma...@gmail.com> #45
Running tests and having coverage data is a basic scenario for every developer that has some self-respect.
sc...@gmail.com <sc...@gmail.com> #46
eu...@rbs.co.uk <eu...@rbs.co.uk> #47
wi...@gmail.com <wi...@gmail.com> #48
ga...@google.com <ga...@google.com> #49
The root cause of this issue has been fixed, and you are almost certainly hitting another issue. Please open a new bug to help us track issues in a better way.
[Deleted User] <[Deleted User]> #50
ga...@google.com <ga...@google.com> #51
Please read all comments before posting, as
Description
Enabling test orchestration causes incorrect coverage report statistics. Only the last run test will have coverage data correctly reported, all other test coverage data is lost when looking at the report.
I have attached a vanilla app created by android studio that has coverage enabled, test orchestrator enabled, and two tests that test two methods in the main activity.
Running the generated task 'createDebugAndroidTestCoverageReport' and checking the report will show only the last executed test has correct coverage data.
Libraries used: Espresso:3.0.1, Runner:1.0.1
What steps will reproduce the problem?
1. Create a vanilla app from the android studio prompt.
2. Enable test coverage in the debug buildtype (testCoverageEnabled = true)
2b. Enable test orchestration in testOptions (execution 'ANDROID_TEST_ORCHESTRATOR')
3. Create two test methods in the main activity (they can be static)
4. Create two tests in androidTest to test those methods.
5. Run the 'createDebugAndroidTestCoverageReport'
6. Open the report index: /build/reports/coverage/index.html
7. Navigate to the MainActivity and check the coverage for the two test methods.
EXPECTED: Both test methods are reported as covered.
ACTUAL: Only the last run test subject (method under test) has coverage reported.
How are you running your tests (via Android Studio, Gradle, adb, etc.)?
Gradle / Android Studio Gradle Projects Window using the 'createDebugAndroidTestCoverageReport'
What is the expected output? What do you see instead?
Code Coverage reports all methods have coverage.