2017-08-10 59 views
0

我已經和Android應用程序是可以正常使用而回。我正在使用Facebook提供的帳戶工具包進行用戶身份驗證,並且我碰到了一堵牆。在進行了一些更改並再次測試應用程序後,登錄不起作用。當用手機或短信登錄時,應用程序崩潰,編譯時驗證失敗。 老實說,我更多的Web比Android所以原諒我的無知,如果這是一件很小的。編譯時驗證失敗(帳戶套件的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(); 
    } 
} 

回答

1

這似乎是用一個try-catch

更新您的谷歌Play版本服務(和所有其他的內部同步塊com.google.android.gms的本地版本的問題它周圍),並確保正確的版本是在你的腳本的gradle

如果還是不行,請嘗試禁用即時運行,但是這是怎樣的一個長鏡頭的引用。

如果這些工作都不起作用,請將您的Google服務和fb/accountkit庫從舊版本降級到舊版本,並確定它是否正常運行,然後逐一升級以診斷哪個新版本導致此問題驗證失敗

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 
}