博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio如何导出可供Unity使用的aar插件详解
阅读量:4310 次
发布时间:2019-06-06

本文共 4751 字,大约阅读时间需要 15 分钟。

前言

  项目之前使用Eclipse导出的jar文件来做与Android交互,最近因为工作需要需使用Android Studio的aar文件,网上参考了部分文章,也结合自己的理解重新整理一下具体的方法,通过写一个测试Demo来表述Android Studio创建aar的过程与及Unity如何使用aar文件,希望对刚好有这个需求的人能起到部分帮助与引导,同时如果文中有误希望也能不吝赐教。

版本信息

  Unity 5.3.1f1,

  Android Studio 2.2.3

Android Studio导出可供Unity使用的aar插件

一、 创建Android Studio工程

  1)第一步,点击File->New->New Project,打开"Create New Project"对话框,选择合适的Application name与Company Domain,保证Package name与Unity项目中的Bundle Idenifier一致
       
  2)第二步,选择Phone and Tablet,并选择合适的Minimum SDK(也可以在创建后的build.gradle中设置)
       
     3)第三步,选择“Empty Activity”
       
     4)第四步,保持默认的Activity Name与Layout Name即可
   5)最后,点击"Finish"创建工程

二、添加Unity的classes.jar引用

  1)把Unity引擎目录下中的”Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar“文件拷贝至Android Studio工程中的libs目录

  2)右击"Project"视图,打开"Open Module Settings", 添加“classes.jar”依赖

    

三、编写Android侧代码(修改MainActivity代码)

import android.os.Bundle;import android.widget.Toast;import com.unity3d.player.UnityPlayer;import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity {     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }     // 显示Toast消息    public void ShowToast(final String message){        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();            }        });    }     // 返回一个字符串(静态方法)    public static String GetInformation()    {        return "This is a Plugin's content!";    }}

 四、修改build.gradle,设置工程导出为aar

  1)apply plugin: 'com.android.application'  修改为     apply plugin: 'com.android.library'

  2)删除 applicationId "com.zcode.unityandroidplugindemo"

  3)修改后的build.gradle为

apply plugin: 'com.android.library' android {    compileSdkVersion 24    buildToolsVersion "24.0.1"    defaultConfig {        minSdkVersion 18        targetSdkVersion 24        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }} dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:24.1.1'    testCompile 'junit:junit:4.12'    compile files('libs/classes.jar')}

五、修改AndroidManifest.xml

     1)修改样式
          我们需要在 AndroidManifest 中的 application 结点修改应用的主样式为系统样式,因为导出的 AAR 文件将不带自定义的样式,在我们的 Unity 项目中生成最终 apk 的时候会出现样式找不到的错误。
          
          同时需要删除res\Values目录下的styles.xml文件
 
     2)在主 activity 结点下添加<meta-data>信息,否则在 Unity 导出 APK 时会报找不到manifest 文件的错误信息
          

六、导出供Unity使用的*.aar文件

     1)点击“Build -> Build APK”,生成aar文件

     2)由于Unity在打包APK时会自动包含自身的classes.jar,所以需使用压缩软件打开aar文件删除libs目录下的classes.jar文件

Unity导入插件,并调用

一、创建Unity工程

二、导入插件到Unity工程中

     1)新建Plugins目录与Android子目录
     2)拷贝aar文件与AndroidManifest.xml文件至Android目录下
  

三、编写测试代码

     1)新建一个“Call.cs”的脚本文件

     2)在“Call.cs”脚本中编写调用Android侧代码

using UnityEngine;using System.Collections; public class Call : MonoBehaviour {    string information_ = null;     void OnGUI() {        //调用显示一个文本为“Hello World!”的Toest        if(GUI.Button(new Rect(0, 0, 200, 20), "Show Toest - Hello World!")) {            //Unity侧调用Android侧代码            using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {                using (AndroidJavaObject jo = jc.GetStatic
("currentActivity")) { //调用成员方法 jo.Call("ShowToast", "Hello World!"); } } } //获得插件侧的返回字符串 if (GUI.Button(new Rect(0, 40, 200, 20), "Get Plugin's Information")) { //Unity侧调用Android侧代码 using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic
("currentActivity")) { //调用静态方法 information_ = jo.CallStatic
("GetInformation"); } } } //显示返回的字符串 GUI.Label(new Rect(220, 40, Screen.width - 220, 20), information_); }}

四、导出APK

     1)设置Bundle Identifier(保持与插件PackageName一致)
     2)设置合适的Minimum API Level(保持与插件)

五、测试

Demo地址

  

结尾

  Android侧调用Unity侧的方式在此就不多做赘述,网上相关的文章也很多。

  Android插件工程中使用第三方的aar库中遇到的Bug解决方案

    1.需手动拷贝至Unity项目Plugin/Android目录下,不然会找不到该库引起NoClassDefFoundError的错误,导致项目真机引起宕机(PS:Unity打包APk时并不会检查Android插件中是否完整包含其它aar库)

    2.确定所有的aar库中的android:minSdkVerion与android:targetSdkVersion一致

  

转载于:https://www.cnblogs.com/xtqqkss/p/6387271.html

你可能感兴趣的文章
Abp框架下 Area中新建Layout报错的问题
查看>>
linux下修改hosts文件
查看>>
Restful API 设计参考原则
查看>>
两个实用的Python的装饰器
查看>>
将前端所要传的参数设置在一个对象中,将对象转换成字符串往后台传
查看>>
BOM
查看>>
9、连接查询A
查看>>
钽电容封装大全及技术参数
查看>>
linux线程同步浅析
查看>>
UNIX环境高级编程——信号(API)
查看>>
SVG
查看>>
selenium-ide-2.3.0 组件在foxfire45.0无法安装的问题
查看>>
C#中get和set
查看>>
MySQL补充
查看>>
signal信号
查看>>
Daily scrum 11.2
查看>>
定位 position: absolute & relative
查看>>
hdu 3272 Mission Impossible
查看>>
python程序打包成可执行程序
查看>>
Ubuntu/Windows下利用“HIDAPI”库函数实现与Hid类USB设备通信
查看>>