android - 我可以在 Android 上使用 Guice 吗?
问题描述
Guice 与安卓兼容吗?我问是因为在一个全新的项目中,我在创建注入器时遇到了一个奇怪的错误,请参见下文:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}:
[...]
com.google.common.util.concurrent.UncheckedExecutionException:
Caused by: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Unable to load cache item
[...]
Caused by: java.lang.UnsupportedOperationException: can't load this type of class file
at java.lang.ClassLoader.defineClass(ClassLoader.java:591)
[...]
这是崩溃的一段代码(在我的 MainActivity 中):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
Guice.createInjector(MyModule()) // The exception happens here
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
这是我的模块:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(DummyInterface.class).to.(DummyImplementation.class);
}
每当我使用toInstance()
intead of to()
statement 时,应用程序运行良好,这让我认为 guice 反射功能与 Android 不兼容。
这是一个正确的假设还是我做错了什么?因为我从未见过 Guice 不能在 Android 上使用。
解决方案
使用 Guice 的no_aop 版本:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.3</version>
<classifier>no_aop</classifier>
</dependency>
推荐阅读
- android - 访问被拒绝查找属性 ro.vendor.hwui.texture_cache_size
- python - 将多个列表合并为单个列表格式
- javascript - 从 Angular 中的 @Input 更新 ngOnChanges 视图
- javascript - CKFinder - 图像切割到指定尺寸
- amazon-web-services - SonicWall 和 AWS 之间的站点到站点连接 - IAM 策略
- mongodb - 汇总聚合中的所有命名字段
- sql-server-2016 - 为什么 SQL Server 不能正确显示 sys.columns.object_id?
- r - 使用 ggplot2 绘制条形图不起作用
- apache-kafka - 在 apache camel 的 .to() 方法中使用交换消息
- android - 每次获取不同App的Hash String | 短信检索 API