Android Studio adds both @androidx.annotation and @android.support.annotation problem-ThrowExceptions

Exception or error:

I updated Android Studio to version 3.2.0.

When I accept any change from list of suggestion or alt + enter.

  • Problem is @androidx.annotation auto created.
  • Thus suggestions method have two annotation @androidx.annotation.Nullable and android.support.annotation.Nullable.
  • I don’t want to manually remove this unwanted suggestion, so what can I do to have only android.support.annotation?
  • Also androidx.annotation package is not added in my app. and I don’t want to add androidx.annotation.

See example.

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public class LoginActivity extends AppCompatActivity {
    @Override
    public void onCreate(@androidx.annotation.Nullable @Nullable Bundle savedInstanceState, @androidx.annotation.Nullable @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }
}

Is there some IDE setting to remove auto generation of androidx.annotation?

Update

I could get rid of this problem with migrating to androidx (from official doc), but I am not able to migrate all projects to androidx currently. So need a solution.

How to solve:

AndroidX is the new extension libraries for backward compatibility support. In future new feature backward compatibility support will be addressed in AnddroidX. As stated in this blog https://android-developers.googleblog.com/2018/05/hello-world-androidx.html

The stable release of 28.0.0 will be the final feature release packaged as >android.support. All subsequent feature releases will only be made available as >androidx-packaged artifacts.

https://developer.android.com/topic/libraries/support-library/revisions

Revision 28.0.0 Production
(September 21, 2018)

This is the stable release of Support Library 28.0.0 and is suitable for use >in production. This will be the last feature release under the >android.support packaging, and developers are encouraged to migrate to >AndroidX.

Moving your app from android.support to androidx-packaged dependencies

Refer to this link, https://developer.android.com/jetpack/androidx/migrate

If you depend on a library that references the older Support Library, Android Studio will update that library to reference androidx instead via dependency translation. Dependency translation is automatically applied by the Android Gradle Plugin 3.2.0-alpha14, which rewrites bytecode and resources of JAR and AAR dependencies (and transitive dependencies) to reference the new androidx-packaged classes and artifacts. We will also provide a standalone translation tool as a JAR.

So, In Step 1(dependency translation): In your gradle.properties file set the android.useAndroidX flag to true and the android.enableJetifier flag to true.

android.useAndroidX=true
android.enableJetifier=true

in Step 2(source refactoring): With Android Studio 3.2 and higher, you can quickly migrate an existing project to use AndroidX by selecting Refactor > Migrate to AndroidX from the menu bar.

Refactor to Androidx from menu

###

Android Studio has a preference option “Exclude from import and completion” that you could use to suppress the suggestion of androidx packages:

enter image description here

In this screenshot, for example, I’ve added the java.time package to this list because I want my autocomplete to suggest org.threeten.bp.LocalDate but never java.time.LocalDate.

You should be able to add androidx.annotation to this list to solve your problem.

###

Just add annotationProcessor 'androidx.annotation:annotation:1.1.0' as a dependency in your build.gradle(Module: app) file.

###

Android Studio can only import files which are included in your classpath. This includes Androidx libraries – thankfully, if the classes are not present, Studio won’t suggest them (which is why the rest of us don’t see this issue in our projects).

That being said, the implication here is that you have updated your gradle file to include the package containing androidx.annotation.NonNull

com.android.support:support-annotations became androidx.annotation:annotation:1.0.0 according to the migration guide, so you can look for this group in your module Gradle file.

The simplest fix is to remove that package from Gradle, then Clean and Rebuild.

Note: If you want to stick with Support annotations then the latest and greatest version is 28 as mentioned here

###

Using Android Studio 3.3.1, I was able to replicate the problem. My project had just been created, with no AndroidX dependency. When I created the first fragment and overrode onCreateView(), the 2 annotations @androidx.annotation.Nullable and @Nullable were automatically added by Android Studio to the method (no prompt given with a possible choice of import). The only annotation import automatically added was import android.support.annotation.Nullable;

If you do not wish to migrate to AndroidX, here is a fix that worked for me:

  • Manually delete all the @androidx.annotation.Nullable annotation(s), leaving only the original @Nullable annotation(s).

  • Do File > Invalidate Caches / Restart

When a new Fragment will be created in the app, only the original Support Library’s @Nullable annotation will be added.

###

As stated on the support library release note.

This is the stable release of Support Library 28.0.0 and is suitable
for use in production. This will be the last feature release under the
android.support packaging, and developers are encouraged to migrate to
AndroidX.

You could still use support’s class path. (remember to clean and build)
But highly recommend you to migrate to AndroidX as 28.0.0 of support is the last release.

(remember, NOT BOTH)

###

I will start by saying I am a very novice slapstick hobbyist, but this same issue got me stuck and its been resolved for some time and I could not find a solution.

Everyone talks about adding dependencies to your build.griddle files, and if that works great, for me it never took until I changed the actual import listings (API 28) and changing them from…

import android.support.annotation.Nullable;

-to-

import androidx.annotation.Nullable;

I had to do a lot of improvisation to find the new directories because they didn’t seem to be listed anywhere I could easily find.

This was also the case for Fragment, FragmentManager, DialogueFragment, and many others. I hope this helps someone suffering like I was!

Leave a Reply

Your email address will not be published. Required fields are marked *