Unity对接SDK-Android Studio 导出aar方

2019-07-17  本文已影响0人  liuaf

简介

网上很多教程,但都是一些比较旧的,这里整理出一份新的,以供参考。
这篇主要讲的是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

创建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之间的调用,推荐参考一下!
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')
}
<?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>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.windsoul.allinlibrary"><!-- 这个包名要在发布后复制到Assets/Plugins/Andorid/ 目录下 -->
上一篇下一篇

猜你喜欢

热点阅读