AndroidX MultiDex not found - android

I'm creating a new android project and decided to use the new AndroidX replacement for the support libraries, docs for which can be found here: https://developer.android.com/jetpack/androidx/migrate.
I followed the steps to the letter and after syncing gradle I have access to the androidx namespace and various classes contained within. However, when creating my application class I want to inherit from androidx.multidex.MultiDexApplication (which can be seen in the table in the link above). However, the entire multidex package doesn't exist.
Has anyone resolved this issue? Any pointers?

android.enableJetifier=true does not make the least sense, while being able to replace it.
you can simply add it as a dependency, without non-transparent mangling of name-spaces:
implementation "androidx.multidex:multidex:2.0.1"

If you are using androidx you should add MultiDexApplication(reference from androidx) to your manifest file.
<application
android:name="androidx.multidex.MultiDexApplication"
.....></application>

In addition to Martin Zeitler's answer, I had to add in my gradle build file:
defaultConfig {
...
multiDexEnabled true // Add this line
...
}
As well as the dependency
implementation "androidx.multidex:multidex:2.0.0"
As to why it happens, this userguide on Android Developers explains it very well.

build.gradle app module
android {
compileSdkVersion 22
buildToolsVersion "23.0.0"
defaultConfig {
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion 22
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}

Ok, figured it out!
Multidex library was never part of android support lib, it was additional library that had to be imported in gradle. So, I've now imported it in my dependencies block in my modules gradle file and set the following in my gradle.properties file:
# Jetifier automatically updates dependancy binaries
# To swap out support lib for androix
android.enableJetifier=true
Now, at compile time, the multidex dependency is swapped out for androidx implementation.

Related

Android - Firebase analytics causes failures

Adding this line to my gradle:
implementation 'com.google.firebase:firebase-analytics:17.0.1'
Results in this error:
error: resource android:attr/fontVariationSettings not found.
Based on what I read online, to fix this, I upgrade my compileSdkVersion from 27 to 28:
compileSdkVersion 28
Then I get this error when I try to run:
Program type already present: com.google.android.gms.internal.measurement.zzbq
And from there it's a spinning circle changing things and version numbers and adding things to the settings.gradle, etc, with androidx. I have no idea how to fix this, and I imagine there is a more simple solution. Thoughts?
EDIT: It may be worth mentioning that when I made the above changes, I see red across all of these, indicating that it should not use a different version (27) than the compileSdkVersion (28), so I'm not sure if I should make that change:
implementation "com.android.support:support-v4:$rootProject.supportVersion"
implementation "com.android.support:appcompat-v7:$rootProject.supportVersion"
implementation "com.android.support:recyclerview-v7:$rootProject.supportVersion"
implementation "com.android.support:cardview-v7:$rootProject.supportVersion"
implementation "com.android.support:design:$rootProject.supportVersion"
Well try to change to the latest version of firebase-analytics
com.google.firebase:firebase-analytics:17.1.0
And in your build.gradle
classpath 'com.google.gms:google-services:3.2.1
Paste below lines in build.gradle (Module:app) may this help you:
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
This will force the build to use a lower support library.
Turned out I needed to go back to this version of Analytics for it to play nicely with my project:
implementation 'com.google.firebase:firebase-analytics:16.0.3'
The app compat libraries are not compatible with v17 or later of the analytics SDK, since it was migrated to androidx (androidx and the old v4 and v7 support libs are not compatible). So in order to use the latest one, we would have to migrate all code to use androidx (which was not an option at this time).

Android Material and appcompat Manifest merger failed

I have next grade
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.google.android.material:material:1.0.0-rc01'
}
But when I want to build app I get next log:
Manifest merger failed : Attribute application#appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.
Okey! Go to manifest and do it:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="ru.chopcode.myapplication">
<application
tools:replace="android:appComponentFactory"
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:roundIcon="#mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="#style/AppTheme">
</application>
</manifest>
Then I get this error in my Logcat:
Manifest merger failed with multiple errors, see logs that I have Linked with it
I had similar problem. Added two lines in gradle.properties file:
android.useAndroidX=true
android.enableJetifier=true
These two lines automatically resolved my dependency conflicts between google's files and third party dependencies. Here's the link to follow: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project
I faced same error when i try to add Kotlin-KTX library to my project.
I try to AndroidX migration, and problem fixed!
Reason of Fail
You are using material library which is part of AndroidX.
If you are not aware of AndroidX, please go through this answer.
One app should use either AndroidX or old Android Support libraries.
That's why you faced this issue.
For example -
In your gradle, you are using
com.android.support:appcompat-v7 (Part of old --Android Support Library--)
com.google.android.material:material (Part of AndroidX) (AndroidX build artifact of com.android.support:design)
Solution
So the solution is to use either AndroidX or old Support Library. I recommend to use AndroidX, because Android will not update support libraries after version 28.0.0. See release notes of Support Library.
Just migrate to AndroidX.Here is my detailed answer to migrate to AndroidX. I am putting here the needful steps from that answer.
Before you migrate, it is strongly recommended to backup your project.
Existing project
Android Studio > Refactor Menu > Migrate to AndroidX...
It will analysis and will open Refractor window in bottom. Accept changes to be done.
New project
Put these flags in your gradle.properties
android.enableJetifier=true
android.useAndroidX=true
Check #Library mappings for equal AndroidX package.
Check #Official page of Migrate to AndroidX
What is Jetifier?
In my case, this is working perfectly..
I have added below two line codes inside manifest file
tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Credit goes to this answer.
Simple Solutions - migrate into AndroidX
in the gradle.properties, just add below two scripts
android.useAndroidX=true
android.enableJetifier=true
What was the reason ↓
All packages in AndroidX live in a consistent namespace starting with the string androidx. The Support Library packages have been mapped into the corresponding androidx.* packages. For a full mapping of all the old classes and build artifacts to the new ones, see the Package Refactoring page.
Please see the Package Refactoring page
Just change "rc01" in first and last line inside dependencies to "alpha1"
This is working for me
Just remove the android.support dependancy
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
Quoting From Material Guidelines
If you don’t want to switch over to the new androidx and com.google.android.material packages yet, you can use Material Components via the com.android.support:design:28.0.0-alpha3 dependency.
Note: You should not use the com.android.support and com.google.android.dependencies in your app at the same time.
Just removing this dependency works fine
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
Here is complete dependencies example
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.material:material:1.0.0-beta01'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
As of Android P, the support libraries have been moved to AndroidX
Please do a refactor for your libs from this page.
https://developer.android.com/topic/libraries/support-library/refactor
See This Image and Add This line in your android AndroidManifest.xml
tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Please go to Refactor->Migrate->Migrate to Android X.
Please add this to your gradle.properties file:
android.enableJetifier=true
android.useAndroidX=true
And perform Sync.
Add these lines inside in AndroidManifest.xml file.
tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
just add these two lines of code to your Manifest file
tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Migrate to androidX if it an existing project. If it is new project add these two flags to Gradle.propeties
android.enableJetifier=true
android.useAndroidX=true
for more detail steps https://developer.android.com/jetpack/androidx
or check this What is AndroidX?
Follow these steps:
Goto Refactor and Click Migrate to AndroidX
Click Do Refactor
Only If you don't want to use androidx
So in my case, I am using a library that was using androidx but I am not using androidx so when I downgraded that library version the problem was resolved.
In my Case:
implementation 'com.github.turing-tech:MaterialScrollBar:13.+'
the above-mentioned library makes problem 13.+ will automatically get a new version of the library which using androidx. So I downgraded library version to:
implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'
And the problem was resolved.
This issue mainly happened for old dependencies.
There have 2 solution:
First one:
Update all old dependencies and ClassPaths from Project level gradle files.
classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'
Second one:
Your project Migrate to AndroidX
From Android Studio Menu -> Refanctor -> Migrate to AndroidX
Thanks, let me know if anyone help from this answer.
Finally found a quick and easy solution by adding two lines in the android/build.gradle file.
googlePlayServicesVersion = "16.+"
firebaseVersion = "17.6.0"
Please follow this 100% correct.
Its all about the library versions compatibility
I was facing this strange bug couple of 2 hours.
I resolved this error by doing these steps
hange your build.gradle dependencies into
implementation 'com.google.android.gms:play-services-maps:17.0.0'
to
implementation 'com.google.android.gms:play-services-maps:15.0.0'
All I did was go to the "Refactor" option on the top menu.
Then select "Migrate to AndroidX"
Accept to save the project as a zip file.
Please update Android Studio as well as Gradle to ensure no problems are encountered.
Create new project and compare your build.gradle files and replaced all
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
and other dependencies with the same as were in a new project
someting like that
implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
implementation 'androidx.core:core-ktx:1.0.0-alpha3'
And then fixed imports to use androidx in kotlin files.
If you do not intend to migrate to AndroidX follow the below steps
In terminal type gradlew app:dependencies
After dependencies are shown in the window press Ctrl+f and type androidX
You will find all the dependencies which are using androidx lib internally you may have to downgrade that or use alternative for that to ensure it is no longer using androidX libs internally.
1.Added these codes to at the end of your app/build.gradle:
configurations.all {
resolutionStrategy.force 'com.android.support:support-v4:28.0.0'
// the above lib may be old dependencies version
}
2.Modified sdk and tools version to 28:
compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion 28
3.In your AndroidManifest.xml file, you should add two line:
<application
android:name=".YourApplication"
android:appComponentFactory="AnyStrings"
tools:replace="android:appComponentFactory"
android:icon="#drawable/icon"
android:label="#string/app_name"
android:largeHeap="true"
android:theme="#style/Theme.AppCompat.Light.NoActionBar">
Or Simply
Go to Refactor (Studio -> Menu -> Refactor)
Click the Migrate to AndroidX. it's working
it's working.
First of all be sure to add this line in manifest tag
xmlns:tools="https://schemas.android.com/tools"
Then add tools replace your suggested one in Android studio
Go to Refactor (Image )
Click the Migrate to AndroidX. it's working
it's working.
Try this
tools:replace="android:appComponentFactory"
android:appComponentFactory="android.support.v4.app.CoreComponentFactory"
Rebuild your project.
I had this same problem for three days.
It is like android wants us to either use Kotlin Or AndroidX, they are doing away with Android.
But this is how I solved it.
I migrated my project to AndroidX. This does not bring in any errors related to this issue in question, It updates files respectively. No method, class or variable name needs to be changed in your application.
NB: You must be using the latest Libraries (build.grudle file) in the latest stable version of android studio 3.4.1
I don't know this is the proper answer or not but it worked for me
Increase Gridle Wrapper Property
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
and Build Gridle to
classpath 'com.android.tools.build:gradle:3.4.2'
its showing error because of the version.
Change proguardFile in build.gradle (Module: app) to the following
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
instead of
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
This worked for me
For solving this issue i would recommend to define explicitly the version for the ext variables
at the android/build.gradle at your root project
ext {
googlePlayServicesVersion = "16.1.0" // default: "+"
firebaseVersion = "15.0.2" // default: "+"
// Other settings
compileSdkVersion = <Your compile SDK version> // default: 23
buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
targetSdkVersion = <Your target SDK version> // default: 23
supportLibVersion = "<Your support lib version>" // default: 23.1.1
}
reference
https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941
I'm also facing the same issue,
for your android studio, you just change the android Gradle plugin version 3.3.2
and Gradle version is 5.1.1

Import class from 3rd Party Library. Android Studio 3.1, Gradle 3.1

After updating Android Studio and gradle to 3.1, I changed all compile statements to implementation. But when I build, android studio cannot resolve imports found in 3rd party libraries.
Scenario: Main projects imports sub-module which also import a jar file.
When I try to import a class from the jar file into the main project, android studio is not able to resolve it.
How can I import the single file without having to add the jar file as a dependency in the main project?
You should use api instead, it is the new compile or have the dependency directly in your main project. Just changing implementation to api will fix the issue but you consider using implementation wherever possible to improve build time.
You can see the difference between api and implemenation here.
The answer by #nongthonbam-tonthoi is correct but he does not explain why.
Short version
Implementation - hide this dependency from other modules(that depend on this module). if B depends on A, it cannot use any dep declared in A using implementation.
api - Make this available to other modules that depend on this module.i.e if you add say GSON as a dep in module A using api rather than implementation, all other modules that depend A can use GSON without declaring it again.
Long version
implementation is a way of declaring dependencies for only a given module. What this means is that, the dependency can only be used in that particular module. compile on the other hand "leaks" the dependencies to other modules so you can import and use the classes that dep brings in other modules. If you want this behavior, the new way of doing it is to use api.
This change is particularly targeted at multi-module projects as it can help gradle avoid re-compiling a module during a build when it does not change.
However if you're migrating from an old project, chances are you are (ab)using compile to use dependencies declared in other modules without explicitly declaring them again.
You can keep using compile but remember that it's is deprecated and will be removed soon.
See here for a deeper explanation.
Edit build.gradle (Module:app) and change SDK version to 27.1.1
Eg:
defaultConfig {
applicationId "com.projectname"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
implementation 'com.android.support:appcompat-v7:27.1.1'
and rebuild the project and restart android studio

Support Annotation does not exist after upgrading to Android Studio 3.0

After I upgrade my project to AndroidStudio 3.0-beta1, my androidTest files stopped compiling.
A lot of packages are not found, some of them are:
error: package android.support.annotation does not exist
error: cannot find symbol class StringRes
error: cannot access AppCompatActivity
class file for android.support.v7.app.AppCompatActivity not found
I already added
androidTestCompile "com.android.support:support-annotations:25.3.1"
into build.gradle
But even with this, I have the errors of package not found. I tried running the tests from inside Android Studio and from terminal with ./gradlew connectedCheck
Just add this to your dependencies
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation "com.android.support:support-annotations:28.0.0"
annotationProcessor 'com.android.support:support-annotations:28.0.0'
I had the same problem. The issue is not that you upgraded AndroidStudio but that your target version and compile version are below 26 after updating the build tools in your SDK.
So changing
android {
compileSdkVersion 25
defaultConfig {
applicationId "bla.bla"
minSdkVersion 21
targetSdkVersion 25
}
}
to
android {
compileSdkVersion 26
defaultConfig {
applicationId "bla.bla"
minSdkVersion 21
targetSdkVersion 26
}
}
solves the issue.
In my case it happened after migrating to androidX .
The decision merely was :
go to the *.java file(s) pointed and comment strings with packages
//import android.???
and re-import androidX-ed ones.
Build the project again and you are done.
Try this:
import androidx.annotation.StringRes
I had got similar errors and corrected it by adding.
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
inside your Android.mk folder.
Note: This is for change in binary directly where you have to run .mk file separately.
If using Android Studio, check Writing Android.mk file in Studio.
I read the previous answer and wanted to provide a different approach to correct it although its harder this way.

Access to the dex task is now impossible, how to upgrade to 1.5.0?

I want to upgrade gradle to 2.0.0-beta or 1.5.0, I have the dex plugin in my gradle at the moment, but even when I removed it I was still getting the same error. How do I properly get rid of the multidex dependency
Error:Access to the dex task is now impossible, starting with 1.4.0
1.4.0 introduces a new Transform API allowing manipulation of the .class files.
See more information: http://tools.android.com/tech-docs/new-build-system/transform-api
build.gradle More info on multidex
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
The Transform API doesn't give too much info.
Is there any to get this work or any examples how to use the transform api, anything at all?
I know it works with 1.3.0, I need at least 1.5.0
At the project level build.gradle, put this (or whatever version you need)
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
As far as
How do I properly get rid of the multidex dependency?
You need to remove all references to multidex in the Gradle files, then sync Gradle and clean and rebuild the project
I'm not sure if it's going to help. I got a similar error and I deleted the directory which contained that dex file. The path was C:\Users\user\AndroidStudioProjects\AppName\app\build\intermediates\builds\debug\37393618208634. After deleting that directory it worked. You can try this if that does't work you can just put it back. I hope this helps.

Categories

Resources