Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主项目和库项目必须共享同一个包吗?_Android_Android Library - Fatal编程技术网

Android 主项目和库项目必须共享同一个包吗?

Android 主项目和库项目必须共享同一个包吗?,android,android-library,Android,Android Library,我开始创建一个将与多个项目共享的库 问题是,Android文档对于如何正确处理库项目非常缺乏。我在处理主项目和库项目中有共同点的几个类之间的冲突时陷入了困境 我查看了Android(Tic-Tac-Toe)的示例,但它实在太基本了,无法提供帮助,但我只是注意到他们使用了以下软件包: 主要项目:com.example.android.tictactoe 图书馆项目:com.example.android.tictactoe.library 库是否应该始终包含在主项目包中?如果是,由于主程序包名

我开始创建一个将与多个项目共享的库

问题是,Android文档对于如何正确处理库项目非常缺乏。我在处理主项目和库项目中有共同点的几个类之间的冲突时陷入了困境

我查看了Android(Tic-Tac-Toe)的示例,但它实在太基本了,无法提供帮助,但我只是注意到他们使用了以下软件包:

  • 主要项目:com.example.android.tictactoe
  • 图书馆项目:com.example.android.tictactoe.library
库是否应该始终包含在主项目包中?如果是,由于主程序包名称仅属于一个主项目,当多个项目必须共享同一个库项目时,该如何处理

我现在最大的问题是,我的应用程序从库项目而不是主项目调用一个类,我真的不知道最好的方法是什么

谢谢


更新:我的问题与此相关:

有很多第三方库可用(例如),它们与您的库不共享同一个包。

库项目和主应用程序项目的包不需要以任何方式关联

在某些情况下,它确实有助于将库作为主应用程序包的一个子包:这来自于您分割项目的方式,如果库的包作为一个子包将有助于组织代码,请务必将其作为主包的一个子包;否则,不要。这一切都是关于最终构建代码

你的应用程序可以从你的库项目中调用(实际使用就是工作)类。这就是图书馆的用途。它们有助于保持代码的包含性、可重用性以及与其他代码片段的解耦性

问题是相反的:当库从主项目调用类时

Java和Android最常用的方法是使用接口:库提供主项目实现的接口,然后主项目将该实现接口的实例传递给库项目使用。这里最好的例子是回调。Android提供了一组接口(例如
View.OnClickListener
),允许您连接到系统并执行应用程序的逻辑(从应用程序的角度来看,SDK中的Android类就是库)


其他方法是提供要扩展的类(这与提供接口类似,但当您想让库用户选择不实现/覆盖所有方法时,或者当您想在库中通过使用
final
修饰符接收的对象中保留一些基本功能时,可以使用它)和反射(尽可能远离它,因为它很容易出错)。

您可以拥有库项目的不同包结构。与项目结构或包名称没有依赖关系。但您当前的问题似乎是“您导入了错误的类,请检查导入语句”否问题是我的库项目使用的类既在库中定义,也在主项目中定义。我无法更改库中的导入语句以调用主项目中的导入语句。您的语句更容易混淆。该类的路径是什么?在我的主项目中:com.example.newproject.Parameters在我的库项目中:com.example.commonproject.Parameters为什么不使用具有相对路径的类?例如
com.example.newproject.Parameters object=new com.example.newproject.Parameters()'或
com.example.commonproject.Parameters object2=new com.example.commonproject.Parameters()`。但是,当某些类是公共类时,这仍然是真的吗?当主项目中的某些类必须重写库项目中的类时?我从未尝试过。我认为没有理由在项目和库之间使用公共类。问题是,主项目中的类(3个不同的类)在库中需要,但我不知道如何将其链接到此库。从库中删除类本身当然会引发很多错误。我真的不知道。我相信库作为一个库,不应该需要来自其客户端的任何工件。如果需要,它就不是库。是的,也许你是对的,如果没有其他选择,我将重新排序组织我的类并在必要时拆分它们。无论如何,谢谢!谢谢你的回答,这似乎也是在这一个上推荐的Commonware:。顺便问一下,你有这个接口的例子吗?什么接口?
视图。OnClickListener
在这里有文档记录,你也可以在线找到源代码,但我认为这很难实现UIT满足您的需求,因为您的接口很可能有其他需求。