Facebook登录崩溃为app-release.apk

时间:2016-05-01 03:55:13

标签: android facebook android-studio google-signin

我将Google登录和Facebook登录集成到我的应用中。在调试模式下一切正常,但在发布模式下崩溃。

    04-30 11:15:12.113 28773-28788/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                                               Process: com.cs442.Team14, PID: 28773
                                               java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
                                                   at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:772)
                                                   at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:800)
                                                   at com.facebook.internal.Utility.queryAppSettings(Utility.java:846)
                                                   at com.facebook.login.widget.LoginButton$1.run(LoginButton.java:491)
                                                   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                   at java.lang.Thread.run(Thread.java:818)

我已经在我的清单文件中添加了应用程序ID。

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value= "XXXXXXXXX"/>

(因为我支持多种语言,如果我使用@ string / facebook_app_id,我会收到错误。所以我改为直接粘贴数字)

所以这是我到目前为止所遵循的步骤:

  1. 在Google和Facebook开发者网站上创建项目
  2. 在开发者网站上添加了相应的调试和发布密钥
  3. 为我的应用生成密钥库文件,将密钥放入其中(即keytool -exportcert -list -v -alias -keystore \ .keystore,keytool -exportcert -alias -keystore \ GoShop.keystore | openssl sha1 -binary | openssl BASE64)
  4. 从Android Studio生成签名的apk:Build - &gt;生成已签名的APK - &gt;使用了上面的密钥库文件
  5. 我错过了什么?

2 个答案:

答案 0 :(得分:3)

看起来问题是关于“不”使用strings.xml中的字符串引用!由于我支持2种语言,因此我有2个strings.xml(en,de)文件。这里有两个问题:1)在清单文件中,元数据标签'必须'使用@ atring / facebook_app_id 2)现在,由于有多个strings.xml,如果我使用了字符串引用,则会出现此错误:资源从清单引用不能因配置而异(版本限定符除外,例如-v21。)发现de [ManifestResource]的变化(这太荒谬了)

如果我直接使用应用程序ID号进行元数据,则应用程序崩溃(仅发布版本.debug变体工作正常)。当我删除了de的strings.xml文件时,它运行正常!我希望Facebook SDK团队能够真正解决这个荒谬的问题。

答案 1 :(得分:1)

您需要在strings.xml资源文件的字符串值上添加translatable="false"

在其他strings.xml资源(strings-pt.xml,strings.de-xml等)中,不得包含所选的字符串变量。