我最近尝试将我正在处理的应用程序迁移GCM到FCM.在这样做的时候,我发现我以前一直Dagger 2 (2.0.2)用来在服务中提供我的RetrofitAPI和其他用户数据管理器的实例(没有问题),我再也不能这样做了FirebaseMessagingService.
每当我尝试使用FirebaseMessagingService我的Dagger 2 Component界面中列出的子类进行编译时,我都会得到一个IllegalArgumentException.在深入研究一些代码之后,似乎在Dagger 2尝试验证类名并发现第一个字母不是大写时抛出异常.FirebaseMessagingService至少在我的最后,继承自uglified/minified代码库,它的直接超类是zzb(public class FirebaseMessagingService extends com.google.firebase.iid.zzb).
我最好的猜测是,这是罪魁祸首.如果这确实是问题,我不知道该怎么做才能坚持到GCM现在.任何人对此有任何想法或类似的经验吗?
编辑:我有机会向其中一位Firebase开发人员询问此问题:https://www.reddit.com/r/androiddev/comments/4upj1o/beware_of_the_new_firebase/d5tdbk3 - 无解决方案.我可能只是避免直接注入并合并到静态API提供程序.
我有一个类,我在其中进行了一些运行时注释扫描,但它使用了已弃用的 DexFile API,这会导致 LogCat 中出现警告:
W/zygote64: Opening an oat file without a class loader. Are you using the deprecated DexFile APIs?. 我想摆脱此消息并使用适当的 API。文档建议PathClassLoader,但我不明白它DexFile在功能上的等效性。我可以将 aPathClassLoader与DexFile实例结合使用,虽然它确实有效,但它会给我更多警告并且需要更长的时间来扫描。为了清楚起见,我已经包含了我在下面写的注释扫描器。如果有人可以建议如何摆脱这些警告消息和 的替代方案DexFile,因此在删除后我不会受到损坏的功能的影响,我会非常感激。
class AnnotationScanner {
companion object {
fun classesWithAnnotation(
context: Context,
annotationClass: Class<out Annotation>,
packageName: String? = null
): Set<Class<*>> {
return Pair(context.packageCodePath, context.classLoader)
.letAllNotNull { packageCodePath, classLoader ->
Pair(DexFile(packageCodePath), classLoader)
}
?.letAllNotNull { dexFile, classLoader ->
dexFile
.entries()
?.toList()
?.filter { entry …Run Code Online (Sandbox Code Playgroud) 我正在使用具有一些自定义视图实现的第三方库。在实现中,他们调用Utils.showSoftKeyboard(context as Activity). 这与使用片段作为 @AndroidEntryPoint 一起会导致以下异常:
java.lang.ClassCastException: dagger.hilt.android.internal.managers.ViewComponentManager$FragmentContextWrapper cannot be cast to android.app.Activity.
有没有办法在不改变第三方库的情况下解决这个问题?
编辑:当我交换使用对齐时也会ConstraintLayout发生Box......
目前似乎在 JP Compose 中AnimatedVisibility表现不佳。ConstraintLayout
AnimatedVisibility(
visible = entryListState.firstVisibleItemIndex > 3,
enter = fadeIn() + expandIn(expandFrom = Alignment.Center),
exit = fadeOut() + shrinkOut(shrinkTowards = Alignment.Center)
) {
ExtendedFloatingActionButton(
modifier = Modifier.constrainAs(scrollToTop) {
start.linkTo(parent.start)
bottom.linkTo(parent.bottom)
},
text = { Text(text = "TOP") },
onClick = { scope.launch { entryListState.animateScrollToItem(0) } }
)
}
Run Code Online (Sandbox Code Playgroud)
当我取下AnimatedVisibility包装纸时,一切正常。:( 我知道我可以解决这个问题,但我很好奇我在可组合项的配置方面是否做错了什么AnimatedVisibility?
我有一些元素集中在底部工作表中。我想在按下系统后退按钮时折叠底部工作表,这很简单:
BackHandler(enabled = bottomSheetState.isExpanded) {
scope.launch {
bottomSheetState.collapse()
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果一个元素聚焦在底部工作表中,则只有在按两次后退按钮后才会触发后退处理程序的逻辑:一次从元素(轮廓文本字段)中删除焦点,再一次触发折叠。
我尝试使用 来LocalFocusManager.current组合按下后退时清除焦点,但直到元素已经失去焦点后才触发后退逻辑。
我可以清楚地关注折叠,所以我猜真正的问题是当工作表 1) 可见并且 2) 有一个子元素聚焦时,必须按回两次。
有没有办法阻止焦点元素取代我的后台逻辑?
最近,我正在进行代码审查,并遇到了这个人:
if(!sharePermission.isExpired() ? activePermissions.add(sharePermission) : expiredPermissions.add(sharePermission));
Run Code Online (Sandbox Code Playgroud)
基本上,使用三元表达式来调用返回布尔值并将其包装在if(...)语句中的方法,以满足成为独立语句的要求。这是否比
if(!sharePermission.isExpired())
activePermissions.add(sharePermission);
else
expiredPermissions.add(sharePermission);
Run Code Online (Sandbox Code Playgroud)
如果您真的需要将代码压缩为一行?当包裹在if(...)?中时,是否为从三元表达式返回的值分配了额外的空间?
我不喜欢他们两个,只是好奇。
android ×3
java ×2
android-jetpack-compose-scaffold ×1
classloader ×1
dagger-2 ×1
dagger-hilt ×1
dalvik ×1
dex ×1
firebase ×1
jvm ×1
kotlin ×1