Status Update
Comments
gg...@google.com <gg...@google.com>
gg...@google.com <gg...@google.com> #2
this would be nice but given Compose and all other priorities, we are not planning to make any big investments in data binding (support KSP is a very big task).
[Deleted User] <[Deleted User]> #3
Makes sense. And is there any way to trigger data binding without kapt plugin, assuming there are no custom binding adapters in given module?
ay...@blink22.com <ay...@blink22.com> #4
unfortunately no. data binding still needs to be able to read your code and annotation processing is the only API that allows us to do it :(
be...@gmail.com <be...@gmail.com> #5
It's a very disappointing decision for many projects who heavily depend on data binding, which will never be able to get rid of all bindings code and especially rewrite all UI to Compose.
It means that bindings are essentially deprecated
so...@gmail.com <so...@gmail.com> #6
It does not mean data binding is deprecated unless KAPT is deprecated (if that happens, we would need to support KSP).Unfortunately, moving data binding to KSP is a large order so it makes more sense to keep focusing on KAPT than rewrite data binding.
We might re-consider this in the future based on KSP becoming stable, Compose adoption and KAPT stability but it is very unlikely to happen.
nk...@google.com <nk...@google.com> #8
Unfortunately this is still a NO for 2022 planning due to reasons mentioned in #2.
ay...@blink22.com <ay...@blink22.com> #9
kapt seems no longer adding new feature
kapt is in maintenance mode. We are keeping it up-to-date with recent Kotlin and Java releases but have no plans to implement new features. Please use the Kotlin Symbol Processing API (KSP) for annotation processing. See the list of libraries supported by KSP.
So this mean databinding will also deprecated or will be support KSP?
nk...@google.com <nk...@google.com>
ju...@gmail.com <ju...@gmail.com> #10
We don't plan to support KSP nor recommend data binding usage at this stage since compose is our recommended UI solution.
nk...@google.com <nk...@google.com> #11
We don't plan to support KSP nor recommend data binding usage at this stage since compose is our recommended UI solution.
I have been waited this answer in several years.
Because it is an important basis to convince co-workers and for determining the technology stack of an app.
nk...@google.com <nk...@google.com> #12
Databinding is in maintenance mode as well.
We don't plan to support KSP nor recommend data binding usage at this stage since compose is our recommended UI solution.
A bit of a tangent here, but what about ViewBinding? Will that one stay going strong or will it fade along with DataBinding?
[Deleted User] <[Deleted User]> #13
So if you are using Views, ViewBinding will keep working.
It is the same for Data Binding as well though. The main difference is that if KAPT stops working, DataBinding will stop working whereas ViewBinding will keep working. Hopefully, any such situation will be far enough that no-one will care and everyone will be using Compose :)
ga...@google.com <ga...@google.com>
ga...@google.com <ga...@google.com> #16
#14 Kapt will be supported on K2, there are no plans to stop supporting it in Kotlin
ga...@google.com <ga...@google.com> #17
co...@gmail.com <co...@gmail.com> #18
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.