学习参考来源:
https://www.jianshu.com/p/959074cfe0d6
https://blog.csdn.net/huangyimo/article/details/90316910
android stuido 中一个project中可以包含很多个module。主要是包含了android application module,android library module,java library module这三种module。
android application module以作为一个可以运行的应用,而android library module和libs中的.jar文件一样,就是用来调用的库,而java library module也类似android library module。
Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码、资源文件、Android Manifest)。
Android App最终被编译打包成能在Android设备上运行的APK文件,但是Android Library被编译成供其它Android App依赖的Android Archive (AAR)文件。
Java Library最终被编译打包成Java Archive(JAR)文件,它不能打包Android资源文件,但是Android Library不仅能打包Java文件还能打包Android资源文件。
如何区分android application module,android library module,java library module
1、打开App Module的build.gradle文件
android defaultConfig{applicationId "com.example.jacoco"}
文件顶部导入的插件 apply plugin: 'com.android.application'
只有App Module才会有applicationId,插件是com.android.application
2、打开Android Library,Java Library的build.gradle文件
导入的插件分别是com.android.library,插件名称。
疑问:
1.一个project中可以有多个android application module么?如果可以的话都可以作为一个单独的程序运行么?
2.android application module也可以像android library module一样当作库来调用么?
3.android library module可以作为一个程序运行么?
4.三者之间有什么区别?
解答:
1.可以又多个 app module, 都可以作为单独的程序运行,因为编译的时候是针对单个 module 编译的,而 module 之间也都是相互独立的,所以之间没有相互影响。
2.原则上 app module 也能像 library 一样当作库来调用,不过 Android Studio 使用 Gradle 编译,而编译 app module 和 library module 时使用的插件是不一样的(生成结果也不同),所以也就不能直接作为库来调用,不过做一些简单的修改,就能马上修改成一个 library module 库,目录结构和代码都不需要改变。
3.如刚才所说, library module 的编译结果不是 apk ,所以也就没法运行。
4.app module 和 library module 以及 java module 主要区别在于生成内容的不同,app module 生成 apk 程序文件。library module 生成 aar 文件,java module 生成 jar 文件。 aar 和 jar 文件都可以作为 app 的依赖库,主要区别在于 aar 除了能携带编译好的程序以外,还能携带资源,是对jar文件的一个提升。
附图: