1
475797650 2017-03-08 15:43:08 +08:00
module 打成 aar 包吧。资源文件都可以打进去
|
2
nicevar 2017-03-08 15:46:09 +08:00
配置好之后直接用 gradle build 打成 aar 就行了
|
8
nicevar 2017-03-08 17:25:17 +08:00 1
@qw30716 首先你要保证执行到了这个函数,另外 include 换成 from ,用 project.zipTree 来处理 jar 包
task makeJar(type: Jar) { archiveName = 'myjar.jar' from(project.zipTree('libs/xxx.jar')) destinationDir = file('build/libs') } 这样直接 gradlew makeJar 就行了 |
10
tongpeng1995 2017-03-08 18:54:12 +08:00
@nicevar 并不行,如果你 compile 第三方的库,打包成 aar 后,第三方的库没有引用进去。我也是很头疼这个问题。然后 GitHub 上有 fat-aar 这个插件,但是又报了 multi define dex 的错误。
|
11
nicevar 2017-03-08 18:59:29 +08:00
@tongpeng1995 什么并不行,你是根本没搞明白啊,这里面你配置过滤的,想要哪些类完全可以自己决定不要的 exclude 出去,你自己非要打多个进去肯定报错啊
|
12
tongpeng1995 2017-03-08 19:07:04 +08:00
@nicevar 比如你在 library A 里面 compile 了一个第三方的库 B ,然后打包成 aar 。
你在你自己的项目 C 中调用 A 里面的代码(用到第三方库 B ),不会报找不到第三方库 B 的错误吗? 我这边一运行就报找不到第三方库 B 的错误。然后在 GitHub 上找到一个项目叫 fat-aar 的,说是会把第三方的库也打包进 aar 。但是我一运行就报 Multiple dex files define 的错误。 我在项目 C 里面并没有重复 compile 这个第三方库 B 呀。还是说我的用法不对? |
13
nicevar 2017-03-08 19:16:33 +08:00
@tongpeng1995 如果你 A 里面只是编译中使用了 B 库,而不是完全将 B 的类打进 aar ,你在 C 里面当然找不到类了,这种情况你依然要引入 B 库也就是你还需要引入 B 的 aar ,最简单的判断方法你解压出来 A 的 aar 看一下里面的 class 不就明白了,同样你用 fat-aar 打包出来的肯定是多次引入了,去检查一下编译过程
另外将 jar 完全打入 aar 中这种需求很少碰到的,一般都是在厂商修改了 Framework 的情况下用到,平时的项目没必要,我觉得你们应该走向了一个误区,其实在 repositories 引入 aar 目录,然后在 dependencies 里面添加所需的 aar 就行了 |
14
qw30716 OP @tongpeng1995 可以参考这个,但是有个问题,如果第三方 jar 包很多的话,最后你的 jar 包也很大 http://www.jianshu.com/p/5ba1a34e3fed
|
15
tongpeng1995 2017-03-11 11:13:18 +08:00
|
16
qw30716 OP @tongpeng1995 你的意思是只要把 Android module 打包成 jar 就行了,然后其中的依赖全部通过 maven 来完成?但是我对 maven 不是很熟悉,当其他工程调用我们的 jar 包时,如何能确保依赖完成?
|
17
tongpeng1995 2017-03-14 11:21:22 +08:00
@qw30716 要看一下 maven 。。。我现在也在学习 maven
https://stackoverflow.com/questions/40756979/generated-aar-file-not-contain-its-dependency-modules |