我们Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
在Android应用中看到了一些例外情况,我们刚刚添加了Firebase远程配置.
堆栈跟踪如下:
Fatal Exception: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source)
at com.example.app.fragments.SomeFragment.updateFooter(SourceFile:295)
at com.example.app.fragments.SomeFragment.onCreateView(SourceFile:205)
at android.support.v4.app.Fragment.performCreateView(SourceFile:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1108)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1290)
at android.support.v4.app.BackStackRecord.run(SourceFile:801)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(SourceFile:1638)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(SourceFile:679)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(SourceFile:143)
at android.support.v4.view.ViewPager.populate(SourceFile:1240)
at android.support.v4.view.ViewPager.populate(SourceFile:1088)
at android.support.v4.view.ViewPager.setAdapter(SourceFile:542)
at com.example.app.SomeActivity.onSomeAsyncCallback(SourceFile:908)
at com.example.app.SomeDataRetriever.onAsyncHttpCompleted(SourceFile:72)
at com.example.app.io.AsyncHttp.onPostExecute(SourceFile:141)
at com.example.app.io.AsyncHttp.onPostExecute(SourceFile:19)
at android.os.AsyncTask.finish(AsyncTask.java:679)
at android.os.AsyncTask.access$500(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:696) …
Run Code Online (Sandbox Code Playgroud) 最近我们突然看到了下面的一些堆栈跟踪.为什么会这样?这是应用程序尝试通过媒体通知和所有内容将音频评论服务移动到前台时.
java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE
at android.os.Parcel.createException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1910)
at android.os.Parcel.readException(Parcel.java:1860)
at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198)
at android.app.Service.startForeground(Service.java:695)
at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372)
at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328)
at com.example.app.services.AudioService.onStartCommand(AudioService.java:228)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667)
at android.app.ActivityThread.access$1600(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:9186)
at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1189)
at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:870)
at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:20434)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:976)
Run Code Online (Sandbox Code Playgroud) 我们有一个拥有数百万用户的应用程序。在过去的一周里,我们从旧版应用的 Firebase Crashlytics 收到了大约 30 个“速度警报”,错误消息如下:
Fatal Exception: java.lang.SecurityException
GoogleCertificatesRslt: not allowed: pkg=com.example.app, sha1=<sha1 redacted>, atk=false, ver=203914019.true (go/gsrlt)
android.os.Parcel.readException (Parcel.java:1959)
android.os.Parcel.readException (Parcel.java:1905)
com.google.android.gms.common.internal.s.r (s.java:37)
com.google.android.gms.common.internal.W.u (W.java:90)
com.google.android.gms.common.api.internal.At.q (At.java:17)
com.google.android.gms.common.api.internal.rt.run (rt.java:5)
java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:457)
java.util.concurrent.FutureTask.run (FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:636)
com.google.android.gms.internal.ef.run (ef.java:6)
java.lang.Thread.run (Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
它不会影响那么多用户,可能是几百到一千。通常我们不会真正注意到这么小的问题,但是因为对于那些用户来说它似乎一遍又一遍地发生,我们已经收到了所有这些速度警报 - 使其更加明显。
为什么会这样?堆栈跟踪略有不同,但看起来确实与 Google 的 GMS 相关。
我们或我们的用户可以做些什么来避免它?
这个问题似乎分散在 Android 版本和设备供应商之间。
我有一个使用android:minSdkVersion="7"
和的应用程序android:targetSdkVersion="10"
.是否可以隐藏ICS(api level 14)屏幕上的选项菜单按钮?
某些活动可能会使用选项菜单,但不是全部.显示/隐藏选项菜单按钮以使其对于他/她可能期望找到更多功能的用户来说更加直观,这将是很棒的.
我有一个用例,我主要通过转换开始一个活动,但从导航抽屉打开它时不是这种情况.
为了保持过渡顺利,我有一个Transition.TransitionListener
在转换完成时触发一些UI更新.
所以我有这样的事情:
public class SomeActivity extends Activity {
public void onCreate(Bundle savedInstanceState){
// ...
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition();
sharedElementEnterTransition.addListener(new Transition.TransitionListener() {
// ...
@Override
public void onTransitionEnd(Transition transition) {
doSomeUiUpdating();
}
});
} else { // Pre-Lollipop
doSomeUiUpdating();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种运作良好,开始与动漫活动的时候,但我怎么能知道,如果活动未经过渡开始,这样我可以打电话doSomeUiUpdating()
?
我敢肯定,必须有一个简单的方法Activity
,Window
,Transition
或地方,我都忽略了.我不想在调用Activity上中继设置一些告诉动画是否显示的包.
我正在实施Google登录应用.登录本身似乎工作正常,但是当我请求用户的电子邮件或ID令牌时,我在日志中看到以下堆栈跟踪,并且状态来自GoogleSignInResult
asStatus{statusCode=unknown status code: 12500, resolution=null}
03-30 13:59:09.821 3634-4322/? E/Parcel: Class not found when unmarshalling: com.google.android.gms.auth.api.signin.internal.SignInConfiguration
java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:309)
at java.lang.Class.forName(Class.java:273)
at android.os.Parcel.readParcelableCreator(Parcel.java:2281)
at android.os.Parcel.readParcelable(Parcel.java:2245)
at android.os.Parcel.readValue(Parcel.java:2152)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getString(BaseBundle.java:918)
at android.content.Intent.getStringExtra(Intent.java:5767)
at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2365)
at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1848)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:5809)
at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:5593)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:142)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3786)
at android.os.Binder.execTransact(Binder.java:461)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.signin.internal.SignInConfiguration" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:309)
at java.lang.Class.forName(Class.java:273) …
Run Code Online (Sandbox Code Playgroud) 设置完成后targetSdkVersion
,以30
(安卓11)我得到android.content.pm.PackageManager$NameNotFoundException
这样做时,packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)
在包装上,我知道存在。
堆栈跟踪如下:
android.content.pm.PackageManager$NameNotFoundException: com.google.android.apps.maps
at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:202)
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:174)
Run Code Online (Sandbox Code Playgroud) 从最后一个Android Studio 2.0预览版升级到预览版5后,我无法从android.support.wearable
软件包导入.
主应用程序和Wear应用程序都构建并运行得很好,但Android Studio中的编辑器抱怨它无法解析这些导入
import android.support.wearable.activity.WearableActivity;
import android.support.wearable.view.CircledImageView;
import android.support.wearable.view.WearableListView;
Run Code Online (Sandbox Code Playgroud)
在Wear模块的build.gradle中,我有以下依赖项:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':common')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.google.android.support:wearable:1.3.0'
provided 'com.google.android.wearable:wearable:1.0.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
}
Run Code Online (Sandbox Code Playgroud)
据我所知,从http://developer.android.com/training/wearables/apps/always-on.html#EnableAmbient中可以使用提供的语句.它在Android Studio升级之前一直运行良好.我错过了什么吗?
这不仅仅是Wear库的一个问题,它通常用于任何外部依赖.(Topic最初无法在Android Studio 2.0 Preview 5中解析软件包android.support.wearable.)
似乎问题可以在任何时候发生,但实际上,只要我在一个类中进行大量更改(可能是对导入的更改?),它就会发生.刚才它突然无法解决Play服务和Facebook广告的导入(同时仍在为其他依赖项工作).
我偶然发现了问题的解决方法:如果我在安装的Android Studio 1.5中打开并构建项目,则所有导入都是固定的.回到Android Studio 2.0,我可以继续编程,而不会导致很长一段时间无法解析.
对于搜索问题的任何人,Android Studio中的错误消息通常无法解析符号'[package]'.
突然间,我看到我们的应用程序有一个名为“AdMob 离线通知”的新通知渠道。
我们确实使用 AdMob,所以我假设它是由 Google 的库创建的,但我找不到任何关于它的文档。我想知道该频道用于什么,以及是否有可能根本没有它。
应用程序第一次启动时就会创建频道。它的 id 是offline_notification_channel
,其重要性设置为低(无振动,无声音)。
我确实设法在https://groups.google.com/g/google-admob-ads-sdk/search?q=%22admob%20offline%20notifications%22上找到了同样想知道的其他人,但到目前为止还没有答案。
我们有一个带有Activity的应用程序,可以通过两种方式启动:
据我所知,这总是很好.我们要么Intent.ACTION_VIEW
使用数据URI,要么获得一些字符串附加功能.
但是,我们的行动很少,Intent.ACTION_MAIN
而且没有额外的数据.
在toString()
本意向书如下(类名称更改):
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10400000 cmp=com.example.OurActivity }
Run Code Online (Sandbox Code Playgroud)
Intent.getExtras()
返回null,Intent.getDataString()
返回null.
在哪些情况下会发生这种情况?为什么活动的类别Intent.CATEGORY_LAUNCHER
?我们如何获得向用户显示正确内容所需的数据?
launchMode
没有为活动指定.唯一IntentFilter
的AndroidManifest.xml
用于深度链接(而不是发射器类别).
问题发生在Android 4-6的各种设备上.
编辑:忘了提旗子:
由于打印输出表明Intent的标志是FLAG_ACTIVITY_NEW_TASK
和FLAG_ACTIVITY_BROUGHT_TO_FRONT
.我想这可能与此相关.