2016-12-31 28 views
1

我在我的android應用中實現了帳戶管理器。我可以添加帳戶並獲得auth令牌而沒有任何問題,並且signed-apk也可以正常工作。 的流量可以正常使用,直到我添加了一個新的味道我build.grade:獲取驗證令牌在帳戶管理器中不起作用

productFlavors { 
    release { 
     applicationId "com.faranegar.flight.release" 
     versionName "1.0.0" 
     buildConfigField 'String', 'BASE_API', '"http://release.mysite.ir/api/"' 
     buildConfigField 'String', 'BASE_MOBILE_API', '"https://releaseapp.mysite.ir/api/"' 

    } 
    demo { 
     applicationId "com.faranegar.flight.demo" 
     buildConfigField 'String', 'BASE_API', '"http://demo.mysite.ir/api/"' 
     buildConfigField 'String', 'BASE_MOBILE_API', '"http://demoapp.mysite.ir/api/"' 
     versionName "1.0.0" 

    } 
} 

但在簽署-APK獲取身份驗證令牌時味道的gradle中添加不起作用。 我獲得身份驗證令牌,因爲這:

final AccountManager accountManager = AccountManager.get(context); 
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     ActivityCompat.requestPermissions((Activity) context, 
       new String[]{Manifest.permission.GET_ACCOUNTS}, 
       Constants.GET_ACCOUNT_PERMISSION); 
     return; 
    } 
    final Account[] accounts = accountManager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE); 
    for (final Account account : accounts) { 
     if (account.name.equals(Utils.getUserName(context))) { 

      final AccountManagerFuture<Bundle> future = accountManager.getAuthToken(account, AccountGeneral.ACCOUNT_TYPE, null, (Activity) context, null, null); 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         ((Activity)context).runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           Toast.makeText(context, "bundle token", Toast.LENGTH_SHORT).show(); 
          } 
         }); 
         Bundle bnd = future.getResult(); 
         final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); 
         accountControllerListener.onGetToken(authtoken); 
        } catch (final Exception e) { 
         sendErrorToRetrofit(e); 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 
     } 
    } 

而且我得到這個錯誤時調用 '捆綁BND = future.getResult();'

android.accounts.AccountManager.convertErrorToException(AccountManager.java:2153) 
android.accounts.AccountManager.access$500(AccountManager.java:149) 

android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1996)  android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69) 

android.os.Binder.execTransact(Binder.java:453) 

注意:當我追蹤到時,我發現MyAuthenticator中的getAuthToken方法從未在signed-apk中調用過。

回答

0

我認爲,你已經以錯誤的方式否定了這種風味。 看看下面的示例代碼來看看如何定義一個味道是從定義生成類型不同:

不同的生成類型:

您可以創建和配置在模塊級生成類型android {}塊內的build.gradle文件。當您創建新模塊時,Android Studio會自動爲您創建調試版本和發佈版本類型。儘管調試構建類型沒有出現在構建配置文件中,但Android Studio使用可調試的構造它。這使您可以在安全的Android設備上調試應用程序,並配置APK通用調試密鑰庫的簽名。

buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 

    debug { 
     applicationIdSuffix ".debug" 
    } 

    } 

不同口味:

productFlavors { 
    demo { 
     applicationIdSuffix ".demo" 
     versionNameSuffix "-demo" 
    } 
    full { 
     applicationIdSuffix ".full" 
     versionNameSuffix "-full" 
    } 
} 

在創建和配置產品的口味,點擊立即同步在通知欄。同步完成後,Gradle將根據您的構建類型和產品風格自動創建構建變體,並根據其命名。例如,如果你創建了「演示」和「全」產品的口味,並保持默認的「調試」和「釋放」生成類型,搖籃創建以下構建變種:

  • demoDebug

  • demoRelease

  • fullDebug

  • fullRelease

做到這一點,並檢查問題是否仍然存在。

相關問題