Android: Gradle - Module Dependency Issue - Unable to find symbol - android

There are two modules in the Android project
app
database
database build.gradle:
dependencies {
implementation 'com.sample.lib:lib-v7:27.1.1'
}
app build.gradle:
dependencies {
implementation project(':database')
}
Now in the app I am able to get references to the files in sample lib.
But when the apk is to be built i get the following error:
error: cannot find symbol class SampleLibClassA
Why am I getting this error even when database module is added to app module as a dependency?
It works if I add the SampleLib dependency separately again the app module. But doesn't that defeat the whole purpose and wouldn't that just mean duplicate dependencies. Why is there a need to add them separately?
Am I missing something here?
Thanks.

Now in the app I am able to get references to the files in sample lib.
This is not exactly true. You need to use api instead of implementation in the database build.gradle to make it working as you expect.
dependencies {
api 'com.sample.lib:lib-v7:27.1.1'
}

This can actually happen if you are using minifyEnabled true in the module build.gradle file in the buildType.
In case you have this, just set it to false and build again.

Related

Multiple APKs packaging the same library can cause runtime errors with only one dynamic module on AGP 4.0.1?

I have only one dynamic feature module in my project called search, But when I try to build project, I get that Error:
[:search, :search] all package the same library [androidx.recyclerview:recyclerview].
Multiple APKs packaging the same library can cause runtime errors.
Placing each of the above libraries in its own dynamic feature and adding that
feature as a dependency of modules requiring it will resolve this issue.
Libraries that are always used together can be combined into a single feature
module to be imported by their dependents. If a library is required by all
feature modules it can be added to the base module instead.
Of Course, the first thing I did is to research about people who had the same problem And I found:
1- This Question
2- This medium article
Both Introduce the same solution (Use Android Gradle Plugin 4.0) and my project uses AGP 4.0.1, But the problem is that I have only one dynamic module called search. I don't have any other dynamic modules, even further I don't have the dependency of RecyclerView: androidx.recyclerview:recyclerview in my search gradle file, So this is maybe a transitive dependency.
Also, you can find that duplicated dependency in one of two ways:
1-Navigate to: PROJECT_NAME/module_name(In my case: search)/build/intermediates/
and then search for "deps.txt" file in that directory, Open the file and you will see all your module dependencies direct and transitive ones
2- run ./gradlew :module_name:dependencies task
If you tried to remove that duplicated line: androidx.recyclerview:recyclerview from "deps.txt" file, it gets generated again after each build.
That being said, I need some rule in my packagingOptions {} like exclude to prevent that conflict between search.aar and and any other search.* format
Can anyone help, please?
In my case, I removed the below from one of the modules
Note: not from the base module
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

Use buildSrc module versions in app module

I'm following this tutorial on how to manage Gradle dependencies with Kotlin in my Android app and now I would like to use the versions defined in my Versions object in my app module (the scenario is that I have an open source screen and I want to show the library versions). How can I do this?
I have tried adding the buildSrc directory to settings.gradle:
include ':app', ':buildSrc'
and then in my build.gradle file, adding it to the dependencies block:
dependencies {
implementation project(':buildSrc')
}
However, when I try to compile and run, the following error is thrown:
Don't know how to compute maven coordinate for artifact 'Gradle API' with component identifier of type 'class org.gradle.internal.component.local.model.OpaqueComponentIdentifier'.
and there is no much information in the web about this error.
Try to remove the buildSrc module from your settings & build.gradle. Its automatically build and accessible for all other modules in this project.

Library not adding its dependencies when used

I made a library, but when I tried to use it with implementation 'com.example:mylibrary:1.3.0' in my app's build.gradle, I keep getting an error saying the ConstraintLayout dependency (which the library uses but not the app) is not found. However it was explicitly defined in the library's build.gradle with implementation.
When I ran gradlew app:dependencies on the terminal, it shows that the library has no dependencies, even though it actually has 2. This seems to be the source of the problem, Gradle can't detect the dependencies of the library.
I didn't run into this problem for a while but when I decided to remove the ConstraintLayout dependency from my app an error appears during build.
When you're using implementation for the dependencies in your library, the project which is dependent with it will not see the dependencies. You need to use api instead of implementation.

Android dependency hierarchy

In the app module I added baseLayerCore module as a dependency and both app and baseLayerCore modules need core module as their dependency so I defined core in app but baseLayerCore dose not resolve it and needs to be defined in its own build.gradle too.
I believe baseLayerCore does not need core since it has defined in app.
Am I wrong?! Why is this happening?
app build.gradle:
According to this link, I finally recognized that this error occurs on compile time not run time so I should use compileOnly dependancy for baseLayerCore and implementation for app module.These way I can compile the project to see the result but there is no need to have the dependency on run time.

AsyncTask.java cannot resolve symbol for Nullable, Mainthread, WorkerThread

I'm pretty new to android studio, but i got this error and i can't run my project. I saw a lot of answers which suggest to add the support-annotations dependency, but I'm using appcompat so i don't need that. Any thoughts?
Do you have the Android Support Library?
To do it add this to your build.gradle file of the "app" module:
dependencies {
...
implementation "com.android.support:support-annotations:27.1.0"
}
Then sync the project.
Sometimes you can do this automatically by pressing Alt+Enter over the error message and selecting the solution.
You need to fetch the libraries that contain the imports, in your build gradle file of your module add the line inside dependencies tag:
api 'com.android.support:support-annotations:X.X.X'
or
implementation 'com.android.support:support-annotations:X.X.X'
Where X.X.X is the version of the rest of your support libraries.
You should read this article that explains how to implement this with more detail.

Categories

Resources