簡體   English   中英

GCM注冊可用於調試APK,但不能發布APK

[英]GCM registration works for debug APK but not release APK

我的APK的調試版本始終會成功向GCM注冊。 我剛剛構建了APK的第一個發行版。 我可以在連接USB的設備上通過Android Studio安裝和運行發行版。 但是,對於發行版,GCM注冊始終失敗。

private static final String TAG = "GcmRegIntentService";
MyRegistrationEpt backendRegService = getRegistrationService();

try {
    synchronized (TAG) {
        InstanceID instanceID = InstanceID.getInstance(appContext);
        String token = instanceID.getToken(GCM_SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
        Log.i(TAG, "before register, token: " + token);

        backendRegService.register(token).execute();
    }
} catch (Exception ex) {
    Log.i(TAG, "Error: " + ex.getMessage());
}

private MyRegistrationEpt getRegistrationService() {

    MyRegistrationEpt.Builder builder = new MyRegistrationEpt.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
            .setRootUrl("https://some_valid_app.appspot.com/_ah/api/")
            .setApplicationName(getResources().getString(R.string.app_name));

    return builder.build();
}

當此代碼運行時,這是日志:

08-21 12:52:54.225   4145-13398/technology.grandma.margriver I/GcmRegIntentService﹕ before register, token: <some_long_string>
08-21 12:52:55.430   4145-13398/technology.grandma.margriver I/GcmRegIntentService﹕ Error: 404 Not Found

我已經縮小了與在我的構建中剝離Proguard所需的GCM類有關的問題。 如果我在build.gradle中將“ minifyEnabled false”設置為零,問題將消失。 我正在使用Google Play服務API級別7.8.0。 頁面https://developers.google.com/android/guides/setup說:

“ Play服務客戶端庫中包含ProGuard指令,以保留所需的類。Android Gradle插件會自動將ProGuard配置文件添加到AAR(Android ARchive)包中,然后將該包添加到您的ProGuard配置中。在項目創建期間,Android Studio自動創建ProGuard配置文件和build.gradle屬性以供ProGuard使用。要將ProGuard與Android Studio一起使用,必須在build.gradle buildTypes中啟用ProGuard設置。有關更多信息,請參閱ProGuard指南。

我的解釋是,我不需要手動為GCM添加​​任何proguard規則。 誰能解釋這個錯誤的原因並建議我如何解決?

我解決了這個問題。 該問題不是由Proguard剝離GCM類引起的,而是由Google App Engine API客戶端連接至所需的Proguard剝離類型和注釋引起的。 為了解決這個問題,我在Proguard規則中添加了以下幾行:

#  Needed by google-api-client to keep generic types and @Key annotations accessed via reflection

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault

-keepclassmembers class * {
   @com.google.api.client.util.Key <fields>;
}

請參閱https://developers.google.com/api-client-library/java/google-http-java-client/setup#proguard

在API控制台中可能需要添加SHA1證書。 對於調試和發布

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM