【问题标题】:how to solve Unable to find explicit activity in firebase AuthUi?如何解决无法在 firebase AuthUi 中找到显式活动?
【发布时间】:2017-08-03 06:50:33
【问题描述】:

在使用 firebase UI 时,我无法找到明确的活动类 com.firebase.ui.auth.KickoffActivity

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FirebaseApp.initializeApp(this);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);
    mAuth=FirebaseAuth.getInstance();
    mAuthListner=new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user=firebaseAuth.getCurrentUser();
            if(user!=null){
                Toast.makeText(getApplicationContext(),"Sign in success",Toast.LENGTH_SHORT).show();

            }
            else {
                startActivityForResult(AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setIsSmartLockEnabled(false)
                        .setProviders(AuthUI.EMAIL_PROVIDER,AuthUI.GOOGLE_PROVIDER).build(),
                        RC_SIGN_IN);
            }
        }
    };
}

完整的错误信息

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.flamanco.trackme/com.firebase.ui.auth.KickoffActivity}; have you declared this activity in your AndroidManifest.xml? at android.app.Instrumentation.checkStartActivityResult

添加了对 app/.gradle 文件的依赖

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.firebaseui:firebase-ui-auth:1.1.1'
}

apply plugin: 'com.google.gms.google-services'

还在 build gradle 中添加了插件

classpath 'com.google.gms:google-services:3.0.0'

最后我确实在我的 firebase 控制台项目中添加了 SHA1 指纹。

我是否需要在清单文件中添加 auth.kickOff 活动

【问题讨论】:

  • have you declared this activity in your AndroidManifest.xml??
  • 应该已经为您添加了活动。按照此处developer.android.com/studio/build/… 的说明打开合并的清单,并确保已添加此处列出的所有活动github.com/firebase/FirebaseUI-Android/blob/version-1.1.1/auth/…
  • 我无法打开合并的清单,在清单文件的底部,我没有在编辑器底部合并清单选项卡,我使用的是 android studio 2.1
  • 我去了这个路径/project/module/build/intermediates/manifests/full/debug/AndroidManifest.xml。如果这是我应该寻找的,那么它没有添加您提供的链接中列出的活动。
  • 我已经检查了 Firebase UI 的 repo,有更新版本的可用依赖项: compile 'com.firebaseui:firebase-ui-auth:2.2.0' 其他 firebase 依赖项也可以更新到 11.0 .4

标签: android firebase firebase-authentication android-manifest


【解决方案1】:

android.content.ActivityNotFoundException:无法找到显式 活动课 {com.example.flamanco.trackme/com.firebase.ui.auth.KickoffActivity}; 您是否在 AndroidManifest.xml 中声明了此活动?在 android.app.Instrumentation.checkStartActivityResult

您需要在 AndroidManifest.xml

中声明活动

打开清单文件并添加 KicoffActivity。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="auto">
<activity
            android:name="KickoffActivity"/>
</manifest>

另外,我不确定你在这里有两次初始 FirebaseApp..

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FirebaseApp.initializeApp(this);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);
}

通常它应该只在应用程序类中初始化一次, 在 onCreate() 方法中。

创建一个新的应用程序类..

public class YourApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseApp.initializeApp(this);
    }
}

并在清单中添加相同的内容,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="auto">
<application
        android:name="YourApplicationClass"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/MyMaterialTheme.Base">
       <activity
        android:name="KickoffActivity"/>
</application>
</manifest>

【讨论】:

  • 这些库应该是自动添加的,firebaseAuthUI中有很多活动。如果我错了,请纠正我。
  • 什么库?您需要在清单 ryt 中声明活动并初始化 firebase。在任何情况下,添加依赖项都无济于事。请阅读 firebase 文档。你也试过了吗?
  • 我很抱歉说它是库,我正在谈论它的活动,应该添加 AuthUI 的依赖项。在将活动添加到清单时,它会显示一个编译错误 unresolved class kickoffActivity.
  • 发布您的活动和清单文件。检查您提供的活动路径。
  • 我没有创建任何启动活动
【解决方案2】:

手动将 KickoffActivity 活动添加到清单不是正确的解决方案。它应该为你完成。 如果您手动添加 KickoffActivity,您将不得不添加另一个活动和另一个活动,依此类推。 我碰巧有:

tools:node="replace">

在我的清单中。这可以防止任何清单合并。 删除它,它工作正常。

之后,您可能会遇到一些其他合并错误,例如重复标签等。 但是错误会有所不同,并会告诉您现在该怎么做。我有一个标签在我的和合并的清单中使用了两次的情况,所以我被告知要添加:

tools:replace="android:label"

这也解决了这个问题。

【讨论】:

    【解决方案3】:

    确保您已在 AndroidManifest.xml 中正确声明了您的 KickoffActivity 作为

        <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="xxx.xxx.xxx">
    <application
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
    
            <activity android:name=".KickoffActivity">
            </activity>
        </application>
    
    </manifest>
    

    特别是检查名称属性,如果你在包中有活动说“测试”然后 你必须改变 name 属性为

    <activity android:name=".test.KickoffActivity">
                </activity>
    

    如果 AndroidManifest.xml 一切正常, 我建议按照 deividas 所述更新您的库。

    您可以在此处查看 FirebaseUI 发行说明 https://github.com/firebase/FirebaseUI-Android/releases

    还将其他 Firebase 库更新为

     compile 'com.google.firebase:firebase-core:11.0.4' 
     compile 'com.google.firebase:firebase-auth:11.0.4'
    

    【讨论】:

      【解决方案4】:

      最后我已经完全将 android studio 重新安装到最新版本,更新了所有内容,包括

      • 谷歌播放服务
      • firebase 库
      • gradle 版本
      • 谷歌存储库

      我从一开始就开始了新项目,并且没有出现任何错误。 在添加 AUTHUI 依赖项时会自动添加许多活动。 这些活动包括启动活动、恢复密码活动、注册电子邮件活动等 我可以通过路径验证是否

      /project/module/build/intermediates/manifests/full/debug/And‌​roidManifest.xml.
      

      以前我在这个manifest文件中没有kickoffactivity,我不知道原因,但现在我有了。我认为在应用程序的manifest文件中手动添加它不会起作用。

      【讨论】:

        【解决方案5】:

        在清单文件中添加以下内容:

        < activity android :name=" *name of the activity* ">
                    < /activity>
        

        上面的内容默认是在manifest里面添加的,如果没有,那就添加吧。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-01
          • 1970-01-01
          • 2018-03-07
          相关资源
          最近更新 更多