1

我有一个运行良好的 android 应用程序。我正在使用 Facebook 提供的帐户工具包进行用户身份验证,但我碰壁了。进行一些更改并再次测试应用程序后,登录不起作用。当启动电话或短信登录时,应用程序崩溃并编译时验证失败。老实说,我更喜欢 Web 而不是 Android,所以如果这是一件小事,请原谅我的无知。

                                                                      --------- beginning of crash
08-10 12:59:47.328 20322-20322/com.chris.tatusafety E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      Process: com.chris.tatusafety, PID: 20322
                                                                      java.lang.VerifyError: Rejecting class com.google.android.gms.internal.zzasm because it failed compile-time verification (declaration of 'com.google.android.gms.internal.zzasm' appears in /data/app/com.chris.tatusafety-1/base.apk)
                                                                          at com.google.android.gms.auth.api.Auth.<clinit>(Unknown Source)
                                                                          at com.facebook.accountkit.ui.AccountKitActivity.onCreate(AccountKitActivity.java:348)
                                                                          at android.app.Activity.performCreate(Activity.java:6251)
                                                                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2370)
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2477)
                                                                          at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                          at android.os.Looper.loop(Looper.java:148)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5452)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
08-10 12:59:47.329 20322-20365/com.chris.tatusafety V/FA: Inactivity, disconnecting from the service

这是活动。

package com.chris...;

//    Here I import all my libraries... 


public class LoginActivity extends AppCompatActivity {
    public static int APP_REQUEST_CODE = 1;
    @Bind(R.id.phone_login_button) Button mPhone;
    @Bind(R.id.title) TextView mTitle;
    @Bind(R.id.email_login_button) Button mLogin;
    @Bind(R.id.anonymous_login_button) Button mAnony;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_login);
        //check for an access token
        AccessToken accessToken = AccountKit.getCurrentAccessToken();


        if (accessToken != null)
        {
            //if user was logged in it will not be null hence log in into application
            loginSuccess();
        }
    }

    @Override
    protected void onActivityResult (final int requestCode, final int resultCode, final Intent data){
        super.onActivityResult(requestCode, resultCode ,data);

        //confirm that this response matches your request
        if (requestCode == APP_REQUEST_CODE){
            AccountKitLoginResult loginResult = data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
            if (loginResult.getError() != null ){
                //display a login error
                String toastMessage = loginResult.getError().getErrorType().getMessage();
                Toast.makeText(this, toastMessage, Toast.LENGTH_SHORT).show();
            }else if (loginResult.getAccessToken() != null){
                //on succesfull login, proceed
                loginSuccess();
            }
        }
    }



    private void onLogin(final LoginType loginType){
        //acount kit activity
        final Intent accountKit = new Intent(this,AccountKitActivity.class);

        //configure login type and response type
        AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder=
                new AccountKitConfiguration.AccountKitConfigurationBuilder(
                        loginType,AccountKitActivity.ResponseType.TOKEN
                );
        final AccountKitConfiguration configuration = configurationBuilder.build();

        //launch account kit activity
        accountKit.putExtra(AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,configuration);
        startActivityForResult(accountKit,APP_REQUEST_CODE);

    }

    public void onPhoneLogin(View view){
        onLogin(LoginType.PHONE);
    }

    public void onEmailLogin(View view){
        onLogin(LoginType.EMAIL);
    }



    private void loginSuccess() {

        Intent mainActivity = new Intent(this,MainActivity.class);
        startActivity(mainActivity);
        finish();
    }

    public void onAnonymousLogin(View view) {
        AccessToken accessToken = null;
        loginSuccess();
    }
}
4

2 回答 2

1

这似乎是您本地版本的 com.google.android.gms 使用 try-catch 内的同步块的问题

更新您的 google play 服务版本(以及它周围的所有其他内容)并确保在您的 gradle 脚本中引用了正确的版本

如果它仍然不起作用,请尝试禁用即时运行,但这有点远。

如果这些都不起作用,请将您的 google 服务和 fb/accountkit 库从您知道它工作正常时降级到旧版本并查看它是否完好无损,然后逐个升级以诊断导致此验证失败的新版本

于 2017-08-11T18:41:51.597 回答
0

我通过将排除组添加到 facebook sdk 和帐户工具包来修复它。

compile ('com.facebook.android:facebook-android-sdk:4.+'){
    exclude group: 'com.google.android.gms'
}
compile ('com.facebook.android:account-kit-sdk:4.+'){
    exclude group: 'com.google.android.gms'
}

在我的项目中,错误实际上是由版本差异引起的。因此,您还必须强制添加一些您希望在项目中使用的版本的依赖项。例如

compile("com.google.android.gms:play-services-gcm:*whateverVersionThatYouWish*") {
    force = true
}
compile("com.google.android.gms:play-services-location:*whateverVersionThatYouWish*") {
    force = true
}
于 2017-09-27T10:57:54.577 回答