Geo*_*off 7 java android google-api firebase android-studio
新错误
让应用程序工作(加载但声明谷歌播放服务设置不正确).看一下它所说的显示器E/ViewRootImpl: sendUserActionEvent() mView == null
在尝试奖励成就时还会看到以下内容:
07-19 20:51:42.696 16515-16515/com.gfaiers.hangman E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gfaiers.hangman, PID: 16515
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()' on a null object reference
at com.gfaiers.hangman.HangmanActivity.endGameQuestion(HangmanActivity.java:842)
at com.gfaiers.hangman.HangmanActivity$2.run(HangmanActivity.java:682)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Run Code Online (Sandbox Code Playgroud)
Tldr:
回答
在底部经常更新
在我开始之前; 我是Android开发的新手,这是我第一次这样做 - 想象我知道的很少!我已经坚持了几天并且已经做了很多关于它的阅读 - 主要是关于那些非常相似并且说同样事情的文章.而且,我能说的所有这些文章都过时了?
我见过这些
我一开始就一直摔倒......经过另一天,我还有一点......
在使用这里的样品时,他们首先对它们说
更新样本以不使用PLUS范围.也是去掉了.
不确定这实际意味着什么,但它让我觉得他们已经过时了?知道所有事情经常发生的事情,他们现在还没有被编辑4个月(这样的事情需要很长时间吗?).
在尝试使用它们的示例中,我得到以下错误(当加载TrivialQuest时,它是与Achievements链接的那个):
Error:Gradle version 2.2 is required. Current version is 2.10. If using the gradle wrapper, try editing the distributionUrl in D:\Users\Geoff\AndroidStudioProjects\android-basic-samples-master\BasicSamples\TrivialQuest\gradle\wrapper\gradle-wrapper.properties to gradle-2.2-all.zip.
Run Code Online (Sandbox Code Playgroud)
使用包装时:
Error:(23, 0) SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
Run Code Online (Sandbox Code Playgroud)
在其他主题中,为此我需要更改local.properties已经正确的目录.
在哪里我需要帮助:
我已经在PlayStore上发布了应用程序,我已经在其中起草了成就,我只想让他们使用它.
我需要帮助找出如何在我的应用程序中运行BaseGameUtils,我已导入模块,并已按照本指南直到"访问其他Google Play服务API".
当试图通过Android Studio在模拟器(Nexus 5,SDK23)中运行应用程序时,它会提示我更新Google Play服务(无法在模拟器上完成).我不知道这条消息来自何处,因为整个应用程序中没有字符串,它必须来自Google Play服务.
在Galaxy S7edge(6.0.2)上尝试时,它会立即崩溃并出现以下错误:
06-26 14:46:05.080 2240-2240/com.gfaiers.hangman:background_crash E/InstantRun: IO Error creating local socket at com.gfaiers.hangman java.io.IOException: Address already in use
at android.net.LocalSocketImpl.bindLocal(Native Method)
at android.net.LocalSocketImpl.bind(LocalSocketImpl.java:306)
at android.net.LocalServerSocket.<init>(LocalServerSocket.java:48)
at com.android.tools.fd.runtime.Server.<init>(Server.java:94)
at com.android.tools.fd.runtime.Server.create(Server.java:88)
at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:358)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1036)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6321)
at android.app.ActivityThread.access$1800(ActivityThread.java:222)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1861)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Run Code Online (Sandbox Code Playgroud)
在Galaxy S4(5.0.1)上尝试时,它会挂着一段白屏,然后崩溃,监视器说:
06-30 23:56:50.718 2074-2074/com.gfaiers.hangman E/UncaughtException: java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
at com.google.android.gms.common.internal.zzd$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zzd$zza.zzx(Unknown Source)
at com.google.android.gms.common.internal.zzd$zze.zzasb(Unknown Source)
at com.google.android.gms.common.internal.zzd$zzd.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Run Code Online (Sandbox Code Playgroud)
......然后它说
06-30 23:56:52.160 2074-2074/com.gfaiers.hangman E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gfaiers.hangman, PID: 2074
java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
at com.google.android.gms.common.internal.zzd$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zzd$zza.zzx(Unknown Source)
at com.google.android.gms.common.internal.zzd$zze.zzasb(Unknown Source)
at com.google.android.gms.common.internal.zzd$zzd.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
06-30 23:56:52.290 3331-3331/com.gfaiers.hangman:background_crash D/ResourcesManager: creating new AssetManager and set to /data/app/com.gfaiers.hangman-1/base.apk
06-30 23:56:52.700 3331-3331/com.gfaiers.hangman:background_crash E/InstantRun: IO Error creating local socket at com.gfaiers.hangman
java.io.IOException: Address already in use
at android.net.LocalSocketImpl.bindLocal(Native Method)
at android.net.LocalSocketImpl.bind(LocalSocketImpl.java:306)
at android.net.LocalServerSocket.<init>(LocalServerSocket.java:52)
at com.android.tools.fd.runtime.Server.<init>(Server.java:94)
at com.android.tools.fd.runtime.Server.create(Server.java:88)
at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:358)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5122)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1510)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Run Code Online (Sandbox Code Playgroud)
我的应用程序代码全部可以在GitHub上找到(MainActivity - 问题出在哪里).
我从指南到目前为止所做的代码(我认为问题出在哪里):
private GoogleApiClient mGoogleApiClient;
private static int RC_SIGN_IN = 9001;
private boolean mResolvingConnectionFailure = false;
private boolean mAutoStartSignInFlow = true;
private boolean mSignInClicked = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the Google Api Client with access to the Play Games services
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
// add other APIs and scopes here as needed
.build();
...
@Override
public void onConnected(Bundle connectionHint) {
// The player is signed in. Hide the sign-in button and allow the
// player to proceed.
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mResolvingConnectionFailure) {
// already resolving
return;
}
// if the sign-in button was clicked or if auto sign-in is enabled,
// launch the sign-in flow
if (mSignInClicked || mAutoStartSignInFlow) {
mAutoStartSignInFlow = false;
mSignInClicked = false;
mResolvingConnectionFailure = true;
// Attempt to resolve the connection failure using BaseGameUtils.
// The R.string.sign_in_other_error value should reference a generic
// error string in your strings.xml file, such as "There was
// an issue with sign-in, please try again later."
if (!BaseGameUtils.resolveConnectionFailure(this,
mGoogleApiClient, connectionResult,
RC_SIGN_IN, getResources().getString(R.string.sign_in_other_error))) {
mResolvingConnectionFailure = false;
}
}
// Put code here to display the sign-in button
}
@Override
public void onConnectionSuspended(int i) {
// Attempt to reconnect
mGoogleApiClient.connect();
}
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == RC_SIGN_IN) {
mSignInClicked = false;
mResolvingConnectionFailure = false;
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
// Bring up an error dialog to alert the user that sign-in
// failed. The R.string.sign_in_failure should reference an error
// string in your strings.xml file that tells the user they
// could not be signed in, such as "Unable to sign in."
BaseGameUtils.showActivityResultError(this,
requestCode, resultCode, R.string.sign_in_failure);
}
}
}
// Call when the sign-in button is clicked
private void signInClicked() {
mSignInClicked = true;
mGoogleApiClient.connect();
}
// Call when the sign-out button is clicked
private void signOutClicked() {
mSignInClicked = false;
Games.signOut(mGoogleApiClient);
}
Run Code Online (Sandbox Code Playgroud)
GitHub上的代码全部更新.
我还添加了BaseGameUtils build.gradle文件:
...buildToolsVersion android_version
defaultConfig {
minSdkVersion 17
}
Run Code Online (Sandbox Code Playgroud)
这似乎是解决构建失败的解决方案,说minSdkVersion 1对于库版本7等来说太低了.
最近更新
在做了一些阅读之后,我发现了一些看似非常简单的东西,作为应用程序AndroidManifest(而不是lib)的解决方案.
<!--<meta-data android:name="com.gooogle.android.gms.games.APP_ID" android:value="@string/app_id"/>-->
Run Code Online (Sandbox Code Playgroud)
我拿出了注释标记,它仍然显示上面的错误"致命的开发人员错误".我改成了:
<meta-data android:name="com.gooogle.android.gms.games.com.gfaiers.hangman" android:value="@string/app_id"/>
Run Code Online (Sandbox Code Playgroud)
完全不确定这是否是我的意图,它仍然会出现同样的错误.
但进一步阅读......它说:
07-01 22:15:02.196 24277-24277/com.gfaiers.hangman D/FirebaseCrashApiImpl: throwable java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
Run Code Online (Sandbox Code Playgroud)
这会让我觉得AdMob是导致崩溃的原因吗?!
请求local.properties文件
ndk.dir=D\:\\Users\\Geoff\\AppData\\Local\\Android\\Sdk\\ndk-bundle
sdk.dir=D\:\\Users\\Geoff\\AppData\\Local\\Android\\Sdk
Run Code Online (Sandbox Code Playgroud)
到目前为止答案的更新
将依赖项更改为:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile project(':BaseGameUtils')
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:support-v4:24.0.0'
compile 'com.google.firebase:firebase-ads:9.2.0'
compile 'com.google.android.gms:play-services-ads:9.2.0'
compile 'com.google.android.gms:play-services-auth:9.2.0'
compile 'com.google.android.gms:play-services-gcm:9.2.0'
compile 'com.google.android.gms:play-services-games:9.2.0'
Run Code Online (Sandbox Code Playgroud)
错误现在显示为:
07-02 09:36:16.061 2133-7644/? E/Ads: Error transporting the ad response
java.io.IOException: write failed: EPIPE (Broken pipe)
at libcore.io.IoBridge.write(IoBridge.java:502)
at java.io.FileOutputStream.write(FileOutputStream.java:186)
at java.io.DataOutputStream.write(DataOutputStream.java:98)
at java.io.OutputStream.write(OutputStream.java:82)
at com.google.android.gms.ads.internal.request.ac.run(:com.google.android.gms:150)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: write failed: EPIPE (Broken pipe)
at libcore.io.Posix.writeBytes(Native Method)
at libcore.io.Posix.write(Posix.java:223)
at libcore.io.BlockGuardOs.write(BlockGuardOs.java:313)
at libcore.io.IoBridge.write(IoBridge.java:497)
at java.io.FileOutputStream.write(FileOutputStream.java:186)
at java.io.DataOutputStream.write(DataOutputStream.java:98)
at java.io.OutputStream.write(OutputStream.java:82)
at com.google.android.gms.ads.internal.request.ac.run(:com.google.android.gms:150)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
虽然只是瞎猜,但这可能是解决某些问题的第一步......
在您的 gradle 构建文件中,您请求包含所有 Google Play 服务:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile project(':BaseGameUtils')
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:support-v4:24.0.0'
compile 'com.google.android.gms:play-services:9.2.0' <-- NOT GOOD
compile 'com.google.firebase:firebase-ads:9.0.0'
compile 'com.google.android.gms:play-services-ads:9.2.0'
compile 'com.google.android.gms:play-services-auth:9.2.0'
compile 'com.google.android.gms:play-services-gcm:9.2.0'
}
Run Code Online (Sandbox Code Playgroud)
这会带来许多您可能没有使用也不需要的功能。您可以获得所有 Play Services 和Firebase 库。特别是,您可以获得新的 Firebase 崩溃报告,该报告仍处于测试阶段。background_crash我在一些堆栈跟踪中看到条目,其中包含作为崩溃报告组件之一的标签。
许多人(包括我自己)都遇到过因拉取所有 PlayServices/Firebase 而导致应用程序挂起的问题。 请参阅此相关问题。
作为起点,我建议编辑您的依赖项以删除play-services:9.2.0然后保留或仅添加成功构建应用程序所需的特定库。它可能无法解决所有崩溃问题,但可能会有所帮助。另外,我认为您会发现您的应用程序构建速度更快并且生成的 APK 更小。
更新
您的崩溃调用堆栈之一与本相关问题中的类似。该崩溃是由于未定义 APP_ID 的元数据造成的。我不知道你的清单中定义的元数据。你不需要吗?添加它是本指南中使用游戏服务的步骤之一。
更新2
我确认问题是缺少 APP_ID 的元数据。您的 AndroidManifest 文件中曾经有过它,但有一个拼写错误。你在谷歌中多了一个“o”:
com.gooogle.android.gms.games.APP_ID
取消注释清单中的元数据并更正拼写错误。然后应用程序应该运行而不会崩溃。它对我有用。
<application
android:allowBackup="true"
android:icon="@mipmap/icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/NoActionBar">
<meta-data
android:name="com.google.android.gms.games.APP_ID" <-- typo was here
android:value="@string/app_id"/>
Run Code Online (Sandbox Code Playgroud)
如果仍然崩溃,请查看未过滤的 logcat 输出。为此,请No Filters在 Android Monitor 窗口中选择。如果 APP_ID 元数据仍然存在问题,您将看到以下消息:
E/ValidateServiceOp: Using Google Play games services requires a metadata tag with the name "com.google.android.gms.games.APP_ID" in the application tag of the manifest for com.gfaiers.hangman
Run Code Online (Sandbox Code Playgroud)
您可能还想进一步清理构建依赖项:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile project(':BaseGameUtils')
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:support-v4:24.0.0'
compile 'com.google.firebase:firebase-ads:9.2.0'
//compile 'com.google.android.gms:play-services-ads:9.2.0'
//compile 'com.google.android.gms:play-services-auth:9.2.0'
//compile 'com.google.android.gms:play-services-gcm:9.2.0'
compile 'com.google.android.gms:play-services-games:9.2.0'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3015 次 |
| 最近记录: |