Unity3d 接入Android AAR详细流程

这段时间在做给Unity端的Android插件,因为现在的编译已经是走Android最新的gradle ,而不是普通的internal,所以中间遇到的坑也不少,所以从我一一道来,实在是坑啊.我能遇到的问题基本都在这里,现在已经无所畏惧了


Unity编译Android时Gradle的流程:

        一般Unity编译的时候,会去走你unity3d下载好的Gradle插件,17 和 18版本的Gradle版本各不同,而所需要用到的Gradle依赖语法也不相同,所以各位小伙伴 遇到同事用不同版本的unity3d的时候要问清楚.

        1:unity的Gradle插件在哪?


                    这个就是你的unity下面的Gradle插件目录,gradle所用到的一些java的jar包都会在这里

        2:unity编译的时候,gradle会走哪个?

                   unity编译Android项目的时候,他总是去查找这个目录下的3个Gradle文件(其实主要用到就是mainTemplate.gradle),最后就会生成到你自己项目下Temp/gradleOut目录的一个标准的AndroidStudio的gradle项目

                 相信Android的开发童鞋看到这个应该不陌生了,这个就是一个标准的gradle的项目了,当然这只是一个编译时出来的一个项目,你如果修改里面的任何东西,都是没有效果的,因为只是一个临时文件

             3:supportv4 ,v7,等 第三方库找不到? 

                   相信很多小伙伴在写插件的时候,肯定会用到retrofit,rxjava等热门框架,可是去到unity端发现,咦,为啥的aar包丢进去之后,居然没反应? 那么这个时候就是要涉及到自定义gradle的问题了,刚刚都说了,unity3d编译android项目的时候,会走去安装目录下mainTmplate.gradle,这个时候这个gradle是并没有任何依赖的,可能连最基本的supportv7包都没有,那么这个时候就要通过自己去配置你的gradle依赖了.

                    unity3d的官方解释如下图,已经解释的很清楚,如果你想自定义你的gradle,那么提供一个settingsTemplate.gradle到你的Plugins目录下面

                    这是我项目下的gradle文件,目录结构,以及插件的目录,当unity编译Android的时候,uinty先会去找你项目Plugins/Android/mainTemplate.gradle, 如果有,它则会follow你的gradle文件,然后放弃它安装目录下的mainTmplate.gradle,则会走你的gradle,那么这个时候,大家熟悉Android的童鞋,就可以在里面配置你的库了.

           

           需要注意:

                  1:大家一定要注意,使用gradle的时候,你们要问清楚你的同事用的是18版本的unity3d,还是17版本的unity3d,因为这个很重要,新版本的gradle语法已经变成了implementation,和api , 而且你的classpath 也要对应着unity的版本,17版本的unity是2.3, 18版本的3.0 所以这个配置必须要记得.

                   2:当你把aar包丢进去你的plugin目录里面的时候,你的mainTeamplate.gradle,里面的compile 必须把所有的aar都要声明,还有就是AAR包里面用到的第三方库,你也要手工去声明在你的mainTeamplate.gradle里面,不然也会找不到,记得!!记得!!记得!!,重要事情说三遍,不然你总会抱怨你的unity3d调用Android的Class的时候,总是找不到什么AppCompatActivity,之类的东西,因为他v7是后面声明进去的包,android的jar默认只有android.app.Activity这个class,却没有你的AppcompatActivity. 还有 你用到的一些support的版本号最好统一,不然会以免发现出奇奇怪怪的锅,不好背.

                    3:Databinding最好不要用!!!!!!!!!, 为什么? 因为我之前涉及到,我在As3.0上写的插件,然后同事用的是17版的unity,然后总是报我一个错就是,classNotFound: DataBindingWrapper , 这个类我在gradle的compile声明了,最后我发现在可能是gradle的版本不同,databinding使用的时候找不到这个wrapper类,所以很尴尬,尽量不要去用这种类似于,ButterKnife,一些编译生成类的方式.容易出奇奇怪怪的问题,当然如果有童鞋可以弄好了,也可以告诉我一下哈

                    4:Failed Download ??  大家会发现,你在你的AS写的爽爽的AAR包插件,然后丢到你自己电脑上也跑的杠杠,当你的插件aar提交的你的u3d同事里面的后, 发现有 Failed Download 一堆第三方jar , 然后发现怎么build都死活build不了,怎么样都download不了你的retrofit,rxjava? 怎么办? 因为可能你的u3d同事里面的gradle,没有下载过对应想jar,很简单,你需要你的同事下载一个AndroidStudio , 把你compile上面用到的包,丢到你的一个空项目里,让他自己去compile 下载好这些包,然后再从unity那边build,咦 发现可以了. 因为可能是u3d那边的gradle一些proxy配置出的锅. 

                    5:相对路径在u3d的gradle里面用不了,假如你想用../../xxx.keystore去签名,你会发现,它编译的时候会报错,发现它指的路径是temp./../路径找不到你的keystore, 因为它gradle直接编译后生成的AS项目目录是在temp , 所以它只会去找那边的目录,可是呢,你的keystore是不会打包进去你的temp目录里面的, 所以呢,这里如果你想签名,最好就用绝对路径,例如:E:/xxx/xxx/xx/YourPrject/Plugins/Android/xxxx.keystore,这样就OK

                    6:如果你有用到kotlin , 那么你会发现咦,在同事那边的u3d打包的时候,出了一个问题,就是什么xxxkotlin版本不匹配,可是你发现你这边是OK的,你需要去看看你u3d同事里面的kotlin版本在gradle上修改便是.

                

            4:Unity配置Gradle流程:

                        讲了那么多注意的细节,那么我在这里就把配置流程说一下:

                        1:找到你的插件的aar包,该项目必须是在gradle下声明为"applyplugin:'com.android.library'",不然是无法打包出aar的,aar的目录在../YourProject/Build/output/aar/xxxx.aar

                       2:拷贝至Unity项目里的xxxx/Plugins/Android下 就OK,PS: 新的项目unity下面可能没有plugins这个目录,需要自己建一下,在项目Assets下就行

                        3:复制mainTemplate.gradle, 这个gradle在上面也说了在你的unity安装目录.../editor/Editor/Data/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates下,如上图,复制到你的项目Plugins/Android下

                        

                        4:修改Gradle依赖, 找到你这个插件aar用到的第三方compile,例如:supportv7,微信支付,alipay,gson等,一个也不能落,复制到你的mainTemplate.gradle下,还有这个aar叫啥名字,也有手动依赖的gradle上,你添加了多少个aar,就依赖多少个(重复的compile可以不用再次声明,例如:A aar用了支付宝的SDK, B aar也用了支付宝的SDK, 那么你把这个总的gradle文件 只需要依赖一份支付宝的sdk , 不然会报duplicate class xxxxx ) , 如下图 我用到了这几个我自己写的插件aar 

                    

                        

                总结:        

                            以上就是我遇到配置时候的问题, 如果大家也有遇到相同的问题,这样就可以少走弯路了

                           

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容