jar、aar、sdk打包以及app module生成 Library Module

版权声明:本博客仅用于学习交流,欢迎转载,但请注明作者和出处 https://blog.csdn.net/weixin_37577039/article/details/82595766

jar、aar、sdk打包以及app module生成 Library Module

module打包成jar:
1 将要打成jar包的 module 设置为 android-library模式

2 在主module中 用compile project(‘:要打成jar包的 module’)

3 你编译完工程后 所有java文件会在build/bundle/release或者debug目录下会生成classes.jar包

4 在 要打成jar包的 module 的 build.gradle中加入 将classes.jar 导出到library的build/libs/下,并修改名字为mysdk.jar(自定义名字)

//Copy类型
task makeJar(type: Copy) {
    //删除存在的
    delete 'build/libs/mysdk.jar'
    //设置拷贝的文件
    from('build/intermediates/bundles/release/')
    //打进jar包后的文件目录
    into('build/libs/')
    //将classes.jar放入build/libs/目录下
    //include ,exclude参数来设置过滤
    //(我们只关心classes.jar这个文件)
    include('classes.jar')
    //重命名
    rename ('classes.jar', 'mysdk.jar')
}

makeJar.dependsOn(build)

可能会遇到:

com.android.dex.DexException: Multiple dex files define

因此可以在上方的gradle中 过滤掉一些类

task makeJar(type: Jar) {
    from file('build/intermediates/classes/release')
    archiveName = 'sdk.jar'
    destinationDir = file('build/libs')
    //过滤不需要的class
    exclude "**/**/BuildConfig.class"
    exclude "**/**/BuildConfig\$*.class"
    exclude "**/R.class"
    exclude "**/R\$*.class"

    //指定打包的class
    include "com/test/**/*.class"
}

java文件打包为jar

task makeJar(type: Jar) {
    baseName 'test_interface'
    from('src/main/java')

}
makeJar.dependsOn(build)

只对TestInterface.java文件打包为jar (带上包名路径)
点击as右侧的gradle 相应的module下 的Tasks 中的 others 看到 makeJar 双击运行
即可在 build/libs下 查看生成的test_interface.jar包


打包aar:
1 将要打成aar包的 module 设置为 android-library模式

2 在主module中 用compile project(‘:要打成aar包的 module’)

3 编译工程完 会在 build/output/aar目录下 生成.aar包

使用 aar:
4 将aar文件拷贝到app/libs目录下
在 module的 build.gradle中加入

repositories {
    flatDir {
        dirs 'libs', '../模块名/libs'
    }
}

compile fileTree(dir: 'libs', include: ['*.jar'])

最后

compile(name:'aar名字', ext:'aar')

这里的aar名字 不能带 aar后缀

问题:
1 有时 aar上面有个?号 aar中的文件还是用不了
则删掉 再导入一次 然后点击 sync project 按钮


app module生成 Library Module

library module和app module的区别是:
apply plugin: 'com.android.library'apply plugin: 'com.android.application'

1 直接创建 module的时候选择library

2 或者将现有app module转换成 library module
因此直接将 apply plugin: ‘com.android.application’改成 apply plugin: ‘com.android.library’ 即可

当然 最好将 module 名字改成 XXlib
然后包名 目录结构改改 也改改 再改成 lib

1 project的 settings.gradle 引入 include ‘:xxx’ 即可
要使用该 library 则 compile project(':XXXLib')/implements 'xxxlib即可

2 删掉library build.gradle的 applicationId
applicationId 是指定进程名
packageName 是用于四大组件等的包名
默认applicationId 为 packageName

3 manifest 的配置 (如底层用的一些代码涉及到权限申请)
都放在app module层中

4 build.sh 或者其他配置文件是否有一些路径需要修改

常见修改:
一、一个lib中 设置 Activity 上层不同的app module 设置不同的 资源 如图片 string color等

自定义ids.xml 去找资源
可以 在 lib中的value 设置 id
然后 app module层 设置资源

R.drawable.xxx 会通过 id 与具体的资源相连

二、 上层app module 定不同的值 而底层根据这个值去设置
用继承的思想
上层继承lib层 去override 这些属性 以及 override一些轻量级的方法


app module可以完全是一个空壳的
app module的 mainfest配置 lib中的activity配置 lib中的application

也可以上层 application 进行初始化 传入一些配置信息给底层
然后Activity还是底层 只是 图片 颜色等资源是上层
但是若涉及到 布局的变化较大 则最好还是把Activity抽出来


常见问题:
1 Resource IDs cannot be used in a switch statement in Android library modules. Constant expression required.
将switch换成 if else

猜你喜欢

转载自blog.csdn.net/weixin_37577039/article/details/82595766