我将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,我会收到错误。所以我改为直接粘贴数字)
所以这是我到目前为止所遵循的步骤:
我错过了什么?
答案 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等)中,不得包含所选的字符串变量。