Android 应用程序'中的多个应用程序类;s和库模块';s清单文件

Android 应用程序'中的多个应用程序类;s和库模块';s清单文件,android,android-library,android-application-class,Android,Android Library,Android Application Class,在库模块的清单中,我需要使用应用程序类。在安卓系统中有可能做到这一点吗 清单: 模块库清单: <application android:name="com.example.mymodule.App" android:allowBackup="true" android:label="@string/app_name" > </application> 不幸的是,不可能有多个应用程序类,但根据您尝试执行的操作,有一些变通方法

在库模块的清单中,我需要使用
应用程序
类。在安卓系统中有可能做到这一点吗

清单:


模块库清单:

<application
    android:name="com.example.mymodule.App"
    android:allowBackup="true"
    android:label="@string/app_name"
    >
</application>



不幸的是,不可能有多个
应用程序
类,但根据您尝试执行的操作,有一些变通方法

Android应用程序只能有一个子类用作应用程序上下文

这是因为应用程序中的每个
上下文
都有一个可由
getApplicationContext()
检索的引用。没有提供多个应用程序上下文,也没有办法指定是要“库应用程序上下文”还是“主应用程序上下文”

假设您希望在应用程序启动时初始化库,只需创建一个空的
ContentProvider
,即
android:exported=“false”
,并在其
onCreate
方法中进行初始化。这将在应用程序的
应用程序之前调用。onCreate


公共类MyLibraryInitializer扩展了ContentProvider{
@凌驾
公共布尔onCreate(){
//在此处执行初始化
返回true;
}
//下面的内容只是实现抽象方法的样板
//在ContentProvider中,无需更改它
@凌驾
公共游标查询(Uri Uri、字符串[]投影、字符串选择、字符串[]selectionArgs、字符串排序器){
返回null;
}
@凌驾
公共Uri插入(Uri、ContentValues){
返回null;
}
@凌驾
public int delete(Uri、字符串选择、字符串[]selectionArgs){
返回0;
}
@凌驾
公共int更新(Uri、ContentValues值、字符串选择、字符串[]selectionArgs){
返回0;
}
@凌驾
公共字符串getType(Uri){
返回null;
}
}

例如,这就是WorkManager初始化自身所做的工作:它和。

不幸的是,不可能有多个
应用程序
类,但有一些变通方法,这取决于您尝试执行的操作

Android应用程序只能有一个子类用作应用程序上下文

这是因为应用程序中的每个
上下文
都有一个可由
getApplicationContext()
检索的引用。没有提供多个应用程序上下文,也没有办法指定是要“库应用程序上下文”还是“主应用程序上下文”

假设您希望在应用程序启动时初始化库,只需创建一个空的
ContentProvider
,即
android:exported=“false”
,并在其
onCreate
方法中进行初始化。这将在应用程序的
应用程序之前调用。onCreate


公共类MyLibraryInitializer扩展了ContentProvider{
@凌驾
公共布尔onCreate(){
//在此处执行初始化
返回true;
}
//下面的内容只是实现抽象方法的样板
//在ContentProvider中,无需更改它
@凌驾
公共游标查询(Uri Uri、字符串[]投影、字符串选择、字符串[]selectionArgs、字符串排序器){
返回null;
}
@凌驾
公共Uri插入(Uri、ContentValues){
返回null;
}
@凌驾
public int delete(Uri、字符串选择、字符串[]selectionArgs){
返回0;
}
@凌驾
公共int更新(Uri、ContentValues值、字符串选择、字符串[]selectionArgs){
返回0;
}
@凌驾
公共字符串getType(Uri){
返回null;
}
}

例如,这就是WorkManager初始化自身时所做的:它和。

您是否尝试了任何错误?是否有任何错误?我认为不亲自尝试是可能的。。。在com.example.mymodule.The app我有一些dagger初始化app module和com.compnay.app.app中也可以查看这一点,还有更多用于库dagger初始化的代码。所以我需要使用两个应用程序类application@nameAndroidManifest.xml:12:9-52中的value=(com.compnay.app.app.AppController)也存在于AndroidManifest.xml:43:14-77您是否检查了@RyanM answer。。。如果你有。。。在CommentsID中,您尝试了任何错误您有任何错误吗?我认为不亲自尝试是可能的。。。在com.example.mymodule.The app我有一些dagger初始化app module和com.compnay.app.app中也可以查看这一点,还有更多用于库dagger初始化的代码。所以我需要使用两个应用程序类application@nameAndroidManifest.xml:12:9-52中的value=(com.compnay.app.app.AppController)也存在于AndroidManifest.xml:43:14-77您是否检查了@RyanM answer。。。如果你有。。。在评论中,谢谢你的建议。我可以使用ContentProvider在应用程序启动时运行库启动代码吗?你能举个例子吗?是的,这正是我的答案所描述的。我添加了一个框架示例,还链接到了一个真实示例。@Override public boolean onCreate(){//在此处执行初始化AppController AppController=new AppController(getContext());AppController.onCreate();return true;}非常感谢,它正在工作。但也有可能出现任何内存错误。在应用程序中销毁时是否使用ContentProvider?上没有可用的ContentProvider生命周期
<application
    android:name="com.example.mymodule.App"
    android:allowBackup="true"
    android:label="@string/app_name"
    >
</application>