在库模块的清单中,我需要使用一个 Application
类。在安卓系统中是否可以这样做?
Manifest。
<application
android:name="com.compnay.app.App"
android:allowBackup="true"
android:label="@string/app_name"
>
</application>
模块库 Manifest:
<application
android:name="com.example.mymodule.App"
android:allowBackup="true"
android:label="@string/app_name"
>
</application>
很遗憾,不可能有多个的 Application
类,但也有一些变通的办法,这取决于你想做什么。
一个Android应用程序只能有一个 Application
子类,作为应用上下文使用。
这是因为每个 Context
中有一个引用,可以通过 getApplicationContext()
. 没有规定多个应用上下文,也没有办法指定你是要 "库应用上下文 "还是 "主应用上下文"。
假设你要做的是在应用程序启动时初始化你的库,你可以简单地创建一个空的 ContentProvider
那是 android:exported="false"
并在它的 onCreate
方法。 这将在应用程序的 Application.onCreate
.
<provider
android:name="com.my.library.MyLibraryInitializer"
android:authorities="${applicationId}.mylibrary-initializer"
android:exported="false"/>
public class MyLibraryInitializer extends ContentProvider {
@Override
public boolean onCreate() {
// perform your initialization here
return true;
}
// Everything below here is just boilerplate to implement the abstract methods
// in ContentProvider, no need to change it
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
@Override
public String getType(Uri uri) {
return null;
}
}
例如,WorkManager在初始化自己的时候就是这样做的:它用 在其清单中声明提供者 和 中执行其初始化。onCreate
该法 ContentProvider
.