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工程

  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<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一致

Android Studio如何导出可供Unity使用的aar插件详解的更多相关文章

  1. Android Studio一直显示Building“project name”Gradle project info问题详解

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号  欢迎大家关注我的微信公众号:「醉翁猫咪」 Android Studio一直显示 Building&quo ...

  2. Android Android Studio 如何导出 Jar 给 Unity 使用

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

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

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

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

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

  5. Android开发之手势滑动(滑动手势监听)详解

    Android开发之手势滑动(滑动手势监听)详解 在Android应用中,经常需要手势滑动操作,比如上下滑动,或左右方向滑动,处理手势滑动通常有两种方法:一种是单独实现setOnTouchListen ...

  6. Android Studio安卓导出aar包与Unity 3D交互

    Unity与安卓aar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

  7. 如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?

    0x00 前言 大家常常会抱怨安卓平台没有一个统一.好用的性能检查工具.不能像iOS的instrument那样方便. 图片来自:Instruments Help 比如,Unity Blog在3年前就已 ...

  8. Android Studio之导出JavaDoc出现编码GBK的不可映射字符

    使用Android Studio导出JavaDoc时,如果在注释中添加了中文,生成时的时候会出现错误: 编码GBK的不可映射字符. 解决的办法是在Other command line argument ...

  9. Android studio如何导出.so库(NDK开发入门)

    转自:http://blog.csdn.net/ssy_neo/article/details/51758687 项目中用到了硬件调试,google一下拿到了硬件调试的源码,可惜握草so库根本加载不进 ...

随机推荐

  1. 【ES6】更易于继承的类语法

    和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 ...

  2. adaptiveThreshold自适应二值化源码分析

    自适应二值化介绍: 二值化算法是用输入像素的值I与一个值C来比较,根据比较结果确定输出值. 自适应二值化的每一个像素的比较值C都不同,比较值C由这个像素为中心的一个块范围计算在减去差值delta得到. ...

  3. 算法(Algorithms)第4版 练习 1.3.29

    代码实现: //1.3.29 package com.qiusongde.linkedlist; import java.util.Iterator; import java.util.NoSuchE ...

  4. 反向ssh

    参考 https://www.thegeekstuff.com/2013/11/reverse-ssh-tunnel/ https://www.howtoforge.com/reverse-ssh-t ...

  5. hdu 6103(Kirinriki)

    题目链接:Kirinriki 题目描述: 找两个不重叠的字符串A,B. 使得dis(A,B)<=m;\(dis(A,B)= \sum _{i=0}^{n-1} \left | A_i-B_{n- ...

  6. [Poi2011] Meteors(从不知所措到整体二分)

    Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The plan ...

  7. BZOJ_2064_分裂_状压DP

    BZOJ_2064_分裂_状压DP Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的 ...

  8. 闪回之 Flashback Query (dml表、过程、函数、包等)、Flashback version Query

    Flashback Query 背景:Flashback 是 ORACLE 自 9i 就开始提供的一项特性,在 9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数 ...

  9. Flashback Database 闪回数据库

    一.  Flashback Database 说明 Flashback Database 功能非常类似与 RMAN 的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于 Fl ...

  10. 洛谷P3386——二分图匹配

    题目:https://www.luogu.org/problemnew/show/P3386 二分图匹配模板,注意左部点只dfs未匹配点. 代码如下: #include<iostream> ...