前言

  项目之前使用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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}// 显示Toast消息public void ShowToast(final String message){runOnUiThread(new Runnable() {@Overridepublic 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 24buildToolsVersion "24.0.1"defaultConfig {minSdkVersion 18targetSdkVersion 24versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles 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!”的Toestif(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<AndroidJavaObject>("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<AndroidJavaObject>("currentActivity")) {//调用静态方法information_ = jo.CallStatic<string>("GetInformation");}}}//显示返回的字符串GUI.Label(new Rect(220, 40, Screen.width - 220, 20), information_);}
}

四、导出APK

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

五、测试

Demo地址

  http://pan.baidu.com/s/1dFxc7JF

结尾

  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

Android Studio如何导出可供Unity使用的aar插件详解相关推荐

  1. 如何导出android studio程序,Android Studio 如何导出 Jar 给 Unity 使用

    大致步骤如下:1.创建新的 Android Studio 工程2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ja ...

  2. android 方向控制界面,Android Studio屏幕方向以及UI界面状态的保存代码详解

    项目:orientation package com.example.orientation; import android.os.bundle; import android.util.log; i ...

  3. android studio table居中代码_五个方法实例代码详解教你在CSS中实现垂直居中

    点击上面"蓝字"关注我们 你是否和小编一样在编辑一个版面时,通常用到水平居中和垂直居中,而水平居中很好处理,不外乎就是设定margin:0 auto;或是text-align:ce ...

  4. Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度...

    Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子.加快开发速度 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 在使用 A ...

  5. Android Studio下导出jar包和aar包

    Android Studio下导出jar包和aar包 jar包和aar包的区别 步骤 1. 创建Android工程 创建工程比较简单,不错复述 2. 创建一个Library(Module) 创建了一个 ...

  6. Android Studio(3.6.2版本)安装 java2smali 插件,java2smali 插件的使用方法简述

    Android Studio(3.6.2版本)安装 java2smali 插件,java2smali 插件的使用方法简述 一.Android Studio(3.6.2版本)安装 java2smali ...

  7. Android Studio(3.6.2版本)不使用插件查看smali代码的方法

    Android Studio(3.6.2版本)不使用插件查看smali代码的方法 1.app->build->outputs->apk->debug->app-debug ...

  8. 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  9. 《Unity 4 3D开发实战详解》一6.7 物理引擎综合案例

    本节书摘来异步社区<Unity 4 3D开发实战详解>一书中的第6章,第6.7节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区" ...

最新文章

  1. 基础才是重中之重~何为原子化操作
  2. 如何在Python 3中使用raw_input
  3. 前端如何获取联通积分_怎么利用定制的小程序来获取流量
  4. EasyUI DateTimeBox设置默认时间的注意点
  5. php接收16进制数据,PHP_PHP 通过Socket收发十六进制数据的实现代码,最近在php下做关于Socket通讯的 - phpStudy...
  6. 借用构造函数 组合继承 拷贝继承 总结继承
  7. vsftpd服务的搭建
  8. 两种解除禁止右键、选中、复制的方法
  9. 飞鸽传书下载2013
  10. 【hortonworks/registries】Parameter Schema name is null
  11. pap认证过程_PPP协议当中LCP协商过程详解和PAP认证原理介绍
  12. RHCE课程-RH033Linux基础笔记五之常用文本处理命令、输入输出重定向、管道
  13. L1-055 谁是赢家-PAT团体程序设计天梯赛GPLT
  14. typescript 怎么表示当前时间减一个月_吃什么减肚子最快最有效 4种刮油食物吃出小蛮腰...
  15. java基本类型有缓冲区类型的有_Java基础(三十四)String、StringBuffer类和数据缓冲区Buffer类...
  16. python3-基础8
  17. 达州铭仁园2021年高考成绩查询,2021年达州铭仁园中学升学率高不高?
  18. Adobe完全卸载工具
  19. Git初学(5)--关联远程库
  20. mac关于 E45: ‘readonly‘ option is set (add ! to override)

热门文章

  1. C#基础之如何判断两个文件内容是否相同
  2. 微信动态中的背景图更换
  3. es6 --- set实现并集(Union)、交集(Intersect)和差集(Difference)
  4. JavaScript高级程序设计阅读笔记
  5. 部署项目的问题(二)—— 阿里云服务器 ECS升级node版本
  6. 传锤子科技解散成都分公司 才搬迁一年罗永浩就顶不住了
  7. iOS 检查指定日期是否在当前日期之前
  8. ssh服务端口转发详解
  9. python 时间日期处理
  10. C++实践参考——数组类运算的实现