首页 > 代码库 > gradle遇到的一些坑

gradle遇到的一些坑

用 android studio 用的爽了,现在让我去用 eclipse 简直就是杀人!

但是毕竟因为用的人还是少数,所以项目中遇到的一些问题解决方案并不是很多,甚至没有。打算自己的一些经验记录下来。

--------------------------------------------------------------------------------------------------------------

一、关于打包 jar ,官方宣称 android studio 是不支持打包 jar 的,所以之前对接 unity 的时候遇到的问题就是 android studio 中写好的项目然后得转移到eclipse中打包(有点傻),后来才发现 app\build\intermediates\classes 目录下都是已经编译好的字节码文件,所以……直接命令

jar -cvf xxx.jar *

不就好了吗?然后需要注意的是 android studio 将 R类 的字节码文件也编译了进去,在对接 unity 的时候会出现因 android studio 跟 unity 生成的资源 id 不一致导致的 bug,故可将这些 R 相关的删除,这样就ok了。说到资源的问题,

 

二、unity 与 android 对接中导致资源错乱的问题的解决办法(巨大的坑,虽说与 gradle 无关,但都是我实际中一步步遇到的问题,还是写在一起把)

前面已经说了,因为我们在使用 R.id.XXX 的时候其实是 ADT 自动给我们生成的一个 id ,我们引用这个 id 系统帮我们找到这个资源。所以当与 unity 对接时,官方推荐的方式是将 res 文件夹一起放置到 android 路径中,也就是说 unity 负责将资源重新分配 id,这样我们的静态代码中的 id 引用的可能就不是我们所需要的那个资源了,所以解决办法是不能使用静态的 R.id.XXX 获取资源,我们可以使用

// 以前的写法String desc = res.getString(R.id.description); // 现在的写法String desc = res.getString(res.getIdentifier("description", "string", "com.mycompany.MyApp"));

这样就是动态的获取相应的资源了,ok,问题解决。

 

三、坑爹的 unity 还是问题不断,例如我的项目中某个自定义的 view 中的 ondraw 运行不对了在对接之后,死活找不出原因,这都是 unity 布下的坑,所以想为毛我要让 unity 负责打包呢?后来自己在打包的时候意外发现了 build setting 中有 google android project 的选项,没想到 unity 也可以直接 export android 的项目,这样的话也就是说可以将自己的项目作为 lib 由 unity 导出的项目引用或者是在我的 android 项目中引用 unity 的 lib,当然在我的尝试中后者成功的打包运行了,也是我现在一直使用的方式,也就是可以将 unity 导出的项目作为 library 项目导入,然后在自己的 android 项目中引用这个 library 项目,具体怎么操作,网上有很多,自行 google ,但有一个问题就是以 library 的方式可能会有 :app:dexDebug 的错,也就是打包 jar 的时候出了问题,后来发现是因为项目中和 library 中同时都而且不得不引用了同一个 jar (unity提供的用于 android 相关的工具),所以解决办法就是屏蔽其中的某一个 jar,

configurations {    all*.exclude jar: ‘libs/classes.jar‘}

在自己的 android 项目中的 build.gradle 中加入这一段应该就可以解决了。(不熟悉 gradle 的语法这对我来说是个大坑)

 

四、建议的 unity android 打包方式

如果涉及到很多资源由其建议!而且可以在 android 这边进行 debug,前面说的 unity 导出 android 的项目后,将其中的 assests 直接复制到 src/main 下(android studio), 再将 unity 项目中引用的 jar 也放置到 assests 的 libs 中,然后在 main 中建立一个 jniLibs 文件夹,将 unity 导出的项目中 libs/armeabi-X 整个文件夹 copy 进去。这样就没问题了,然后该怎么对接跟其他的一样。

 

五、unity 到处都是坑,标题应该改为 unity 遇到的一些坑才是,哈哈哈哈

gradle遇到的一些坑