1、主要目录结构

新建一个工程,并添加module成功,会生成如下目录结构:

android r目录找不到 android lib目录_android r目录找不到

该目录下的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以外的文件夹及用途介绍



这些就是外部文件相关的一些文件的介绍。我们来看下更重要的app模块里的文件

1.2 module目录下文件夹及用途介绍




android r目录找不到 android lib目录_android r目录找不到_02



这是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{}中进行配置,如图所示:


android r目录找不到 android lib目录_结构_03



有两种加载方式:自动加载和单个加载,加载关键代码如下:

dependencies {

compile files('libs/okhttp-3.2.0.jar')

compile files('libs/gson-2.6.2.jar')

}

其中第一行“compilefileTree(dir: 'libs', include: ['*.jar']) ”即为自动加载(自动加载Libs一级目录下的所有jar文件)


android r目录找不到 android lib目录_so文件_04



自动加载的优点是速度快代码简洁,但是当Libs文件夹下有多级目录时,加载就无效,如下图所示:

android r目录找不到 android lib目录_android r目录找不到_05

当有多级目录时就只能用单个加载来实现了,加载代码:

compile files('libs/image/glide-3.7.0.jar')

按jar的文件路径来加载,配置了之后,Libs文件夹中子级目录下的的jar文件也会加载出来可以使用了;


android r目录找不到 android lib目录_android_06


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,后面按新建普通工程操作;


android r目录找不到 android lib目录_加载_07


android r目录找不到 android lib目录_android_08

(2)新建Module 类型为androidLibrary 成功后如下图

android r目录找不到 android lib目录_android_09

(3)在新建的Module中编写完代码后,接下来编译整个工程后就会自动生成aar包,包的路径在新建的Module==》build ==》output==》aar目录下。如图


android r目录找不到 android lib目录_android r目录找不到_10


android r目录找不到 android lib目录_android_11

2.2.2其他android studio工程引用aar包

(1)直接把要引用的aar包复制粘贴到libs文件夹中,如图所示,把上面lib工程中生成的aar包myvideo-debug.aar复制


android r目录找不到 android lib目录_android r目录找不到_12


粘贴到MyApplication工程中


android r目录找不到 android lib目录_加载_13


(2)新建model依赖这个myvideo-debug.aar包:


android r目录找不到 android lib目录_android r目录找不到_14


选择类型为“import.JAR/.AAR Package”

android r目录找不到 android lib目录_so文件_15

android r目录找不到 android lib目录_加载_16

可以重命名(下图没有O(∩_∩)O),点击finish


android r目录找不到 android lib目录_结构_17

新建module成功后,包含这个aar包的module如下图所示:

android r目录找不到 android lib目录_加载_18

在mylib中去引用,选中mylib右键OpenModule Settings==》dependencies==》Module dependency,选中刚刚生成的myvideo-debug;


android r目录找不到 android lib目录_结构_19

android r目录找不到 android lib目录_android r目录找不到_20

android r目录找不到 android lib目录_android r目录找不到_21

点击OK,引用成功,可以在mylib的build.gradle文件中看到这段代码


android r目录找不到 android lib目录_android_22

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文件


android r目录找不到 android lib目录_so文件_23

android r目录找不到 android lib目录_android_24


android r目录找不到 android lib目录_android_25

(2)把要添加的so所在的jniLibs目录下的三个文件夹都复制粘贴到新建的jniLibs文件下


android r目录找不到 android lib目录_so文件_26


android r目录找不到 android lib目录_so文件_27

android r目录找不到 android lib目录_so文件_28

android r目录找不到 android lib目录_结构_29

android r目录找不到 android lib目录_加载_30

粘贴成功,添加so文件成功。


android r目录找不到 android lib目录_android r目录找不到_31