设为首页 加入收藏

TOP

Android Gradle使用总结(五)
2017-10-13 10:36:55 】 浏览:5363
Tags:Android Gradle 使用 总结
新的思路集成方案如下:

dependencies {
    debugCompile 'com.facebook.stetho:stetho:1.5.0'
}

在 src 目录下创建 debug 目录、release 目录 ,然后分别在 debug 目录 和 release 目录 创建 java 目录 , 在 java 目录中创建包名,比如: com.app , 如下图所示:

这里写图片描述

debug 目录下创建 SDKManage 类 ,如下 :

public class SDKManager {

    public static void init(Context context) {
        //初始化 Stetho
        Stetho.initializeWithDefaults(context);
    }
}

release 目录下创建 SDKManage 类 ,如下 :

public class SDKManager {

    public static void init(Context context) { 
        //这是一个空方法,目的是不引入 Stetho 源码
    }

}

在住项目中的 MyApplication 类,并且完成 Stetho 的初始化,如下:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SDKManager.init(this);
    }
}

这样我们便完成了简单的差异化构建, 打出来的 release 包就没有 Stetho 源码。

SourceSet

SourceSet 简介

SourceSet 可以定义项目结构,也可以修改项目结构。Java插件默认实现了两个SourceSet,main 和 test。每个 SourceSet 都提供了一系列的属性,通过这些属性,可以定义该 SourceSet 所包含的源文件。比如,java.srcDirs,resources.srcDirs 。Java 插件中定义的其他任务,就根据 main 和 test 的这两个 SourceSet 的定义来寻找产品代码和测试代码等。

SourceSet 定义源码目录

在 Android 项目中,我们可以在 src/main/java 目录新建 Java 文件,如下图所示:

这里写图片描述

现在我们在 src 目录下,新建 test1 目录 ,发现不能在 test1 目录中新建 Java 文件,如下图所示:

这里写图片描述

为什么在 test1 目录不能新建 Java 文件,因为 Gradle 中 SourceSet 默认定义的源码文件路径是src/main/java , 其他的文件下下面的源码我们自然无法访问。解决这个问题也很简单,我们需要在 SourceSet 中增加一个源码路径即可。如下所示:

android {
  
    sourceSets {
        main {
            java {
                srcDir 'src/test1' //指定源码目录
            }
        }
    }
}

然后同步一下,就可以在 test1 目录中新建 Java 文件了。如下图所示:

这里写图片描述

当然我们也可以同时指定多个源码目录,比如同时指定 test1 , test2 , test3 为源码目录。

android {
 
    sourceSets {
        main {
            java {
                srcDir 'src/test1' //指定 test1 为源码目录
                srcDir 'src/test2' //指定 test2 为源码目录
                srcDir 'src/test3' //指定 test3 为源码目录
            }
        }
    }
}

或者 这样写 :

android {
    sourceSets {
        main {
            java.srcDirs( 'src/test1' , 'src/test2' ,'src/test3' )
        }
    }
}

效果如下图所示:

这里写图片描述

SourceSet 定义资源目录

定义 test1 目录 Java 源代码路径、res 资源目录。目录结构如下图所示:

这里写图片描述

android {

    sourceSets {
        main {
            java.srcDirs('src/test1/java')  //定义java 源代码
            res.srcDirs('src/test1/res')    //定义资源目录(layout , drawable,values)
        }
    }
}

SourceSet 实现 layout 分包

对于一个大项目来说,页面太多,布局文件就很多,有时在众多布局文件中找某个模块的布局文件,很是痛苦,为了解决这个问题,我们可以在创建多个 layout 目录,不同模块的布局文件放在不同的 layout 目录中,这样查找起来,就容易很多。

例子:

比如我们的项目中,有两个模块分别为:登录、注册。

  • 第一步:把项目中 layout 文件夹改名字为 layouts

  • 第二步:在 layouts 目录下,分别创建 login 、register 目录 。

  • 第三步:分别在 login 、register 目录下创建 layout 目录。注意这一步是必须的,否则会报错。

  • 第四步:把 登录布局文件、注册布局文件 分别放在 第三步创建的对应的 layout 目录下。

效果图如下:

这里写图片描述

SourceSet 实现如下:

android {
   
    sourceSets {
        main {
            res.srcDirs 'src/main/res/layouts/login'  //定义登录布局目录
            res.srcDirs 'src/main/res/layouts/register'  //定义注册布局目录
        }
    }
}

SourceSet 定义 AndroidManifest 文件

指定 test1 目录下的 AndroidManifest 文件。项目结构如下图所示:

这里写图片描述

代码如下:

android {

    sourceSets {
        main {
            manifest.srcFile 'src/test1/AndroidManifest.xml'
        }
    }
}

在组件化开发中, 我们需要针对 debug 与 release 模式下, 指定不同的 Manifest 文件, 代码如下:

android {
    def appDebug = false;
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            appDebug = false;
        }

        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            appDebug = false;
        }
    }

    sourceSets {
        main {
            if (appDebug) {
                manifest.srcFile 'src/test1/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }
}

SourceSet 定义 assets 目录

Android Studio 项目目录中,assets 默认目录如下:

这里写图片描述

如何重新定义 assets 目录 。在项目的根目录下创建 assets 目录,如下图所示:

这里写图片描述

sourceSets 定义代码如下:

android {

    sourceSets {
        main {
            assets.srcDirs = ['assets']
        }
    }
}
首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇两个可能会经常用到的简便方法 下一篇Android下获取FPS的几种方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目