1、主要目录结构
新建一个工程,并添加module成功,会生成如下目录结构:
该目录下的app、mylib就是两个module,其中app是主module,如果在当前工程中添加了一个新的module -- lib,就需要在settings.gralde文件中包含这个新的module。Gradle是Google推荐使用的一套基于Groovy的编译系统脚本上面那个图中出现gradle字眼的就是gradle相关的一些文件。在新建工程时默认会生成两个build.gralde文件,一个位于工程根目录,一个位于app目录下。还有另外一个文件 --settings.gradle。根目录下的脚本文件是针对module的全局配置,它的作用阈所包含的所有 module是通过settings.gradle来配置。这些目录文件可以分为编译系统(Gradle)、配置文件和应用模块这三大类,下文中将对目录中各文件夹用途进行一个系统的介绍,最后一章节详细讲了三种包文件的加载方式。
1.1工程目录下的除module以外的文件夹及用途介绍
文件(夹)名 | 用途 |
.gradle | Gradle编译系统,版本由wrapper指定 |
.idea | Android Studio IDE所需要的文件 |
build | 代码编译后生成的文件存放的位置 |
gradle | wrapper的jar和配置文件所在的位置 |
.gitignore | git使用的ignore文件 |
build.gradle | gradle编译的相关配置文件(相当于Makefile)/项目的gradle编译文件 |
gradle.properties | gradle相关的全局属性设置 |
gradlew | *nix下的gradle wrapper可执行文件 |
graldew.bat | windows下的gradle wrapper可执行文件 |
local.properties | 配置SDK/NDK |
MyApplication.iml | 项目的配置文件 |
settings.gradle | 定义项目包含哪些模块 |
External Libraries | 项目依赖的Lib, 编译时自动下载的 |
这些就是外部文件相关的一些文件的介绍。我们来看下更重要的app模块里的文件
1.2 module目录下文件夹及用途介绍
这是app模块下的文件目录结构,介绍下他们的用途:
文件(夹)名 | 用途 |
build | 编译后的文件存在的位置(包括最终生成的apk也在这里面) |
libs | 依赖的库所在的位置(jar和aar) |
src | 源代码所在的目录(source code) |
src/main | 主要代码所在位置(src/androidTest)就是测试代码所在位置了 |
src/main/assets | android中附带的一些文件 |
src/main/java | 最最重要的,我们的java代码所在的位置 |
src/main/jniLibs | jni的一些动态库所在的默认位置(.so文件) |
src/main/res | android资源文件所在位置 |
src/main/AndroidManifest.xml | AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)) |
build.gradle | 和这个项目有关的gradle配置,相当于这个项目的Makefile,一些项目的依赖就写在这里面/app模块的gradle编译文件 |
proguard.pro | 代码混淆配置文件 |
1.2.1-res下的文件目录结构
java:主要为源代码和测试代码
res:主要是资源目录,存储所有的项目资源
drawable:存储一些xml文件,-*dpi表示存储分辨率的图片,用于适配不同的屏幕。
-mdpi:320x480
-hdpi:480x800、480x854
-xhdpi:至少960x720
-xxhdpi:1280x720
layout:存储布局文件
mipmap:存储原声图片资源
values:存储app引用的一些值
- colors.xml : 存储了一些color的样式
- dimens.xml: 存储了一些公用的dp值
- strings.xml: 存储了引用的string值
- styles.xml : 存储了app需要用到的一些样式
GradleScripts:build.gradle为项目的gradle配置文件
2三种包文件加载和使用
2.1 jar包
Jar包中只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件,如果你只是一个简单的类库那么使用生成的*.jar文件即可。
两种加载使用方式
所有jar包都是在module的Libs文件夹下,加载的代码可以在buid.gradle文件中的dependencies{}中进行配置,如图所示:
有两种加载方式:自动加载和单个加载,加载关键代码如下:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/okhttp-3.2.0.jar')
compile files('libs/okio-1.7.0.jar')
compile files('libs/gson-2.6.2.jar')
}
其中第一行“compilefileTree(dir: 'libs', include: ['*.jar']) ”即为自动加载(自动加载Libs一级目录下的所有jar文件)
自动加载的优点是速度快代码简洁,但是当Libs文件夹下有多级目录时,加载就无效,如下图所示:
当有多级目录时就只能用单个加载来实现了,加载代码:
compile files('libs/image/glide-3.7.0.jar')
按jar的文件路径来加载,配置了之后,Libs文件夹中子级目录下的的jar文件也会加载出来可以使用了;
2.2 aar包
aar包是androidstudio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件,如果你的是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件那么就只能使用*.aar文件,aar文件包含所有资源,class以及res资源文件全部包含。
2.2.1.生成aar包步骤
(1)用androidstudio打开一个工程,然后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操作;
(2)新建Module 类型为androidLibrary 成功后如下图
(3)在新建的Module中编写完代码后,接下来编译整个工程后就会自动生成aar包,包的路径在新建的Module==》build ==》output==》aar目录下。如图
2.2.2其他android studio工程引用aar包
(1)直接把要引用的aar包复制粘贴到libs文件夹中,如图所示,把上面lib工程中生成的aar包myvideo-debug.aar复制
粘贴到MyApplication工程中
(2)新建model依赖这个myvideo-debug.aar包:
选择类型为“import.JAR/.AAR Package”
可以重命名(下图没有O(∩_∩)O),点击finish
新建module成功后,包含这个aar包的module如下图所示:
在mylib中去引用,选中mylib右键OpenModule Settings==》dependencies==》Module dependency,选中刚刚生成的myvideo-debug;
点击OK,引用成功,可以在mylib的build.gradle文件中看到这段代码
2.3 so文件
so文件是unix的动态连接库,是二进制文件,作用相当于windows下的.dll文件。在Android中调用动态库文件(*.so)都是通过jni的方式,加载so文件的提供的API是“voidSystem.load(String pathName)”,其中“athName”:文件名+文件路径;要想调用动态库so文件必须先创建jniLibs文件存放so文件,否则会找不到so文件。
添加.so文件步骤
(1)在src/main中添加 jniLibs文件
(2)把要添加的so所在的jniLibs目录下的三个文件夹都复制粘贴到新建的jniLibs文件下
粘贴成功,添加so文件成功。