Unity3d接⼊AndroidAAR详细流程
这段时间在做给U nity端的Andro id插件,因为现在的编译已经是⾛Andro id最新的gr a dle
id最新的gra
,⽽不是普通的inter na l,所以中间遇到的坑也不少,所以从我⼀⼀道来,实在是坑啊.我能遇到的问题基本都在这⾥,现在已经⽆所畏惧了
Unity编译Android时Gradle的流程:
⼀般Unity编译的时候,会去⾛你unity3d下载好的Gradle插件,17 和 18版本的Gradle版本各不同,⽽所需要⽤到的Gradle依赖        ⼀般Unity编译的时候,会去⾛你unity3d下载好的Gradle插件,17 和 18版本的Gradle版本各不同,⽽所需要⽤到的Gradle依赖语法也不相同,所以各位⼩伙伴 遇到同事⽤不同版本的unity3d的时候要问清楚.
1:unity的Gradle插件在哪?
这个就是你的unity下⾯的Gradle插件⽬录,gradle所⽤到的⼀些java的jar包都会在这⾥
这个就是你的unity下⾯的Gradle插件⽬录,gradle所⽤到的⼀些java的jar包都会在这⾥
2:unity编译的时候,gradle会⾛哪个?
unity编译Android项⽬的时候,他总是去查这个⽬录下的3个Gradle⽂件(其实主要⽤到就是adle),                  unity编译Android项⽬的时候,他总是去查这个⽬录下的3个Gradle⽂件(其实主要⽤到就是adle),最后就会⽣成到你⾃⼰项⽬下Temp/gradleOut⽬录的⼀个标准的AndroidStudio的gradle项⽬
相信Android的开发童鞋看到这个应该不陌⽣了,这个就是⼀个标准的gradle的项⽬了,当然这只是⼀个编译时出来的⼀个项                相信Android的开发童鞋看到这个应该不陌⽣了,这个就是⼀个标准
的gradle的项⽬了,当然这只是⼀个编译时出来的⼀个项⽬,你如果修改⾥⾯的任何东西,都是没有效果的,因为只是⼀个临时⽂件
3:supportv4 ,v7,等 第三⽅库不到?
相信很多⼩伙伴在写插件的时候,肯定会⽤到retrofit,rxjava等热门框架,可是去到unity端发现,咦,为啥的aar包丢进去之后,居然没反应? 那么这个时候就是要涉及到⾃定义gradle的问题了,刚刚都说了,unity3d编译android项⽬的时候,会⾛去安装⽬录下adle,这个时候这个gradle是并没有任何依赖的,可能连最基本的supportv7包都没有,那么这个时候就要通过⾃⼰去配置你的gradle依赖了.
unity3d的官⽅解释如下图,已经解释的很清楚,如果你想⾃定义你的gradle,那么提供⼀个adle 到你的Plugins⽬录下⾯
这是我项⽬下的gradle⽂件,⽬录结构,以及插件的⽬录,当unity编译Android的时候,uinty先会去你
项⽬
Plugins/adle, 如果有,它则会follow你的gradle⽂件,然后放弃它安装⽬录下的adle,则会⾛你的gradle,那么这个时候,⼤家熟悉Android的童鞋,就可以在⾥⾯配置你的库了.
需要注意:
1:⼤家⼀定要注意,使⽤gradle的时候,你们要问清楚你的同事⽤的是18版本的unity3d,还是17版本
的unity3d,因为这个很重要,新版本的gradle语法已经变成了implementation,和api , ⽽且你的classpath 也要对应着unity的版本,17版本的unity是2.3, 18版本的3.0 所以这个配置必须要记得.
2:当你把aar包丢进去你的plugin⽬录⾥⾯的时候,你的adle,⾥⾯的compile 必须把所有的aar都要声明,还有就是AAR包⾥⾯⽤到的第三⽅库,你也要⼿⼯去声明在你的adle⾥⾯,不然也会不到,记得!!记得!!记得!!,重要事情说三遍,不然你总会抱怨你的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不了你的
android retrofitretrofit,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'",不然是⽆法打包出                        1:到你的插件的aar包,该项⽬必须是在gradle下声明为"applyplugin:'com.android.library'",不然是⽆法打包出aar的,aar的⽬录在../YourProject/Build/output/aar/xxxx.aar
2:拷贝⾄Unity项⽬⾥的xxxx/Plugins/Android下 就OK,PS: 新的项⽬unity下⾯可能没有plugins这个⽬录,需要                      2:拷贝⾄Unity项⽬⾥的xxxx/Plugins/Android下 就OK,PS: 新的项⽬unity下⾯可能没有plugins这个⽬录,需要⾃⼰建⼀下,在项⽬Assets下就⾏
3:复制adle, 这个gradle在上⾯也说了在你的unity安装⽬
录.../editor/Editor/Data/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates下,如上图,复制到你的项⽬
Plugins/Android下
4:修改Gradle依赖, 到你这个插件aar⽤到的第三⽅compile,例如:supportv7,⽀付,alipay,gson等,⼀个也不                        4:修改Gradle依赖, 到你这个插件aar⽤到的第三⽅compile,例如:supportv7,⽀付,alipay,gson等,⼀个也不能落,复制到你的adle下,还有这个aar叫啥名字,也有⼿动依赖的gradle上,你添加了多少个aar,就依赖多少个(重复的compile可以不⽤再次声明,例如:A aar⽤了⽀付宝的SDK, B aar也⽤了⽀付宝的SDK, 那么你把这个总的gradle⽂件 只需要依赖⼀份⽀付宝的sdk , 不然会报duplicate class xxxxx ) , 如下图 我⽤到了这⼏个我⾃⼰写的插件aar
总结:
以上就是我遇到配置时候的问题, 如果⼤家也有遇到相同的问题,这样就可以少⾛弯路了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。