美文网首页
Unity对接SDK-Android Studio 导出aar方

Unity对接SDK-Android Studio 导出aar方

作者: liuaf | 来源:发表于2019-07-17 22:25 被阅读0次

    简介

    网上很多教程,但都是一些比较旧的,这里整理出一份新的,以供参考。
    这篇主要讲的是AS中对平台的SDK进行必要的接口包装,发布成aar放到Unity中,Unity中使用和Android通讯的方式来调用。最后从Unity打包成apk文件。
    主要关注点:AndroidManifest.xml.aar.jar

    环境

    Unity2018.4.0,android studio 3.4.2,Gradle4.1
    重要事前说前面,一定注意Unity的版本和Gradle版本。版本不匹配会造成运行错误的。整个打包过程是可以进行的,这点最坑。下面是参考图

    Snipaste_2019-07-16_13-44-49.png
    • 如果AS打aar包的话到Unity最终生成apk的话,以Unity内置的Gradle版本为主。AS中的gradle版本不能高于Unity中的gradle版本
    • 如果是Unity导出AS工程到AS中生成apk的话,以AS的版本为主。Unity中的gradle版本不能高于AS中的gradle版本
    • AS查看Gradle版本如下图


      image.png
    • Unity查看Gradle版本方式,使用Gradle方式导出一个Android工程,在根目录下有个build.gradle文件,和AS中的一样,能看到Gradle版本。


      image.png

    创建Android工程

    创建一个空的android工程,工程名字和包名没有强迫症的话不用纠结,后续发布aar时不出导出这个工程的,只是导出它里面的自定义模块,参考下图

    image.png
    image.png
    image.png

    Android工程中创建Module

    我们之后要做的业务逻辑都在这个Module中,而这个Module才是我们真正需要的,网上也有教程直接把Android工程改成只导出一个Module,这里就不在额外介绍了,为了不被混淆,就容忍一些没用的东西存在吧!Module的包名可以根据自己需求命名,这个包名在之后的Unity工程里会做更改的,参考下图。

    image.png
    image.png
    image.png

    准备依赖包

    • Unity内置的jar包
        发布供Unity使用的aar包,必不可少的需要Unity的classes.jar包,存在目录:UnityEditor的安装目录下\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
      更早的Unity版本这里就不介绍了,存在的目录有差异,自行网上查找。
    • 平台SDK包
        对接哪个平台的自动到相应的官网查找,这里示例使用的是快手SDK的融合包 ,一般提供的有两种,一种aar,一种是jar。
    • 另外Pieces_Jing有篇文章介绍使用反射方式来进行Untiy和Android之间的调用,推荐参考一下!
    • 把整理好的包放到Module/libs目录下,依次 右键 -> Add As Library中,参考下图


      image.png
    • 找到build.gradle(Module:模块名字)的文件中的dependencies项,一般在最下面

    dependencies {
        // 如果libs中的某些jar包不想在发布aar中存在的话,这里要注释掉,比如Unity中的classes.jar不能包含,不然编译apk会报错
        //implementation fileTree(include: ['*.jar'], dir: 'libs') 
        compileOnly files('libs/classes.jar')    //  compileOnly 的方式是项目中可以使用,但发布jar包中不会包含进去
        compileOnly files('libs/kwaisdk-release-1.3.2.aar') // aar的包同样不能包含在发布的aar包中,Unity中不支持这样的引用关系
        implementation files('libs/rx-classes.jar')  // implementation  的方式是发布aar中包含这个jar包
        implementation files('libs/rxjava-2.1.0.jar')
        implementation files('libs/reactive-streams-1.0.2.jar')
    }
    
    • 之后创建MainActivity就和以前的方式一样了,这里就不在多说,下面重点说一下AndroidManifest文件
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.windsoul.allinlibrary"><!-- 这个包名要在发布后复制到Assets/Plugins/Andorid/ 目录下 -->
        <!-- 网络权限,登录必须 -->
        <uses-permission android:name="android.permission.INTERNET" /> <!-- 网络信息获取权限,kanas打点需要记录网络信息,以及sdk需要判断是wifi还是4g的case -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 文件读取权限,allin 强更必须 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 安装权限,targetSdkVersion>=26时,allin强更安装apk需要 -->
        <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- 手机设备信息如imei权限获取,kannas需要 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
        <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:usesCleartextTraffic="true">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
                <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <!-- 加上这个,Unity中需要 -->
            </activity>
        </application>
    
    </manifest>
    
    • 选中创建的Module 发布 Build -> Make Module "所创建的的Module名字",等待结束后可以在build/outputs/aar/看到生成的aar文件,参考下图

      image.png
      image.png
    • 上图中所示的aar文件就是我们想要的,不过还需要进行加工一下,使用解压文件可以打开它,可以看到熟悉的样子,和Eclipse中对接SDK方式很相似。其实就是一个鬼玩意。


      image.png
    • 把它里面的AndroidManifest.xml文件放到Assets/Plugins/Android目录下,然后从aar包中删掉它

    • 打开AndroidManifest.xml找到package="改成Unity的包名"

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.windsoul.allinlibrary"><!-- 这个包名要在发布后复制到Assets/Plugins/Andorid/ 目录下 -->
    
    • 多说一句,aar包中的libs目录检查一下,unity中的classes.jar包不能存在,如果存在的话,删掉。我们前面已经对它们进行设置过,应该不会出现。以及.aar包也不能出现,上面提到过,有的话拿出来,放到Assets/Plugins/Android目录下。如果严格的按照步骤来的话,应该是不存在的才对。

    • 如果Module中有引用的aar包的话,也一并复制到Assets/Plugins/Android目录下。

    • 到此为止,就可以进行Unity打包了。这里不在多说,和正常的发布流程一致

    相关文章

      网友评论

          本文标题:Unity对接SDK-Android Studio 导出aar方

          本文链接:https://www.haomeiwen.com/subject/bcdhlctx.html