Android Studio如何导出可供Unity使用的aar插件详解
http://www.cnblogs.com/xtqqkss/p/6387271.html
前言
项目之前使用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工程



二、添加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
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


六、导出供Unity使用的*.aar文件
1)点击“Build -> Build APK”,生成aar文件
2)由于Unity在打包APK时会自动包含自身的classes.jar,所以需使用压缩软件打开aar文件删除libs目录下的classes.jar文件
Unity导入插件,并调用
一、创建Unity工程
二、导入插件到Unity工程中

三、编写测试代码
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<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
五、测试

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一致
Android Studio如何导出可供Unity使用的aar插件详解的更多相关文章
- Android Studio一直显示Building“project name”Gradle project info问题详解
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 Android Studio一直显示 Building&quo ...
- Android Android Studio 如何导出 Jar 给 Unity 使用
大致步骤如下: 1.创建新的 Android Studio 工程 2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ...
- Android Studio下导出jar包和aar包
Android Studio下导出jar包和aar包 jar包和aar包的区别 步骤 1. 创建Android工程 创建工程比较简单,不错复述 2. 创建一个Library(Module) 创建了一个 ...
- Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度
Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子.加快开发速度 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 在使用 A ...
- Android开发之手势滑动(滑动手势监听)详解
Android开发之手势滑动(滑动手势监听)详解 在Android应用中,经常需要手势滑动操作,比如上下滑动,或左右方向滑动,处理手势滑动通常有两种方法:一种是单独实现setOnTouchListen ...
- Android Studio安卓导出aar包与Unity 3D交互
Unity与安卓aar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- 如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?
0x00 前言 大家常常会抱怨安卓平台没有一个统一.好用的性能检查工具.不能像iOS的instrument那样方便. 图片来自:Instruments Help 比如,Unity Blog在3年前就已 ...
- Android Studio之导出JavaDoc出现编码GBK的不可映射字符
使用Android Studio导出JavaDoc时,如果在注释中添加了中文,生成时的时候会出现错误: 编码GBK的不可映射字符. 解决的办法是在Other command line argument ...
- Android studio如何导出.so库(NDK开发入门)
转自:http://blog.csdn.net/ssy_neo/article/details/51758687 项目中用到了硬件调试,google一下拿到了硬件调试的源码,可惜握草so库根本加载不进 ...
随机推荐
- CentOS下配置静态IP
第一.在VMware中进行配置使用桥接的方式.点击编辑选择虚拟网络编辑器 选择桥接模式,选择桥接到外部的网卡.选择我们主机下的网卡 第二步.配置虚拟机使用桥接模式 第三步:启动虚拟机进入到 /etc/ ...
- linux下编译安装python
从官网下载指定的源码包 https://www.python.org/downloads/source/ 把源码文件以二进制方式上传到linux服务器 安装python需要用到gcc工具,首先查看gc ...
- Linux中常用文件传输命令及使用方法
sftp sftp即Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中 ...
- PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)
利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...
- 深入理解JVM - 线程安全与锁优化 - 第十三章
线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对 ...
- matlab之sum()函数
sum(A,1):对矩阵A按照列求和: sum(A,2):对矩阵A按照行求和: 默认情况下,是按照列求和的. 举例: A=[1 2 3;1 2 3] sum(A,1)的结果: ans = 2 4 6 ...
- C语言中的指针(二)
指针指向谁,就把谁的地址赋给指针,指针变量和指针指向的内存变量是不一样的.不停的给指针赋值,相当于是不断的改变指针的指向. 在开发中要避免野指针的存在,在指针使用完毕之后,记得要给指针赋值成为NULL ...
- laravel登录后台500错误!
登录页面正常显示,填写完用户名密码 点登录后 页面一片空白,没有任何输出.debug可以看到一个500错误,preview和response都是空的.追踪了一下 发现在public/index.php ...
- 解决按 backspace键 出现 ^H 问题
输入命令 stty erase ^H #stty 时一个用来改变并打印终端行设置的常用命令stty iuclc # 在命令行下禁止输出大写stty -iuclc ...
- Gym - 101673:B Craters (几何,求凸包)
题意:给定几个圆,求最短的围合,把这几个包围起来,而且到圆的距离都不小于10. 思路:把每个圆的半径+10,边等分5000份,然后求凸包即可. #include<bits/stdc++.h> ...