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代码)

  1. import android.os.Bundle;
  2. import android.widget.Toast;
  3. import com.unity3d.player.UnityPlayer;
  4. import com.unity3d.player.UnityPlayerActivity;
  5.  
  6. public class MainActivity extends UnityPlayerActivity {
  7.  
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. }
  12.  
  13. // 显示Toast消息
  14. public void ShowToast(final String message){
  15. runOnUiThread(new Runnable() {
  16. @Override
  17. public void run() {
  18. Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
  19. }
  20. });
  21. }
  22.  
  23. // 返回一个字符串(静态方法)
  24. public static String GetInformation()
  25. {
  26. return "This is a Plugin's content!";
  27. }
  28. }

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

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

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

  3)修改后的build.gradle为

  1. apply plugin: 'com.android.library'
  2.  
  3. android {
  4. compileSdkVersion 24
  5. buildToolsVersion "24.0.1"
  6. defaultConfig {
  7. minSdkVersion 18
  8. targetSdkVersion 24
  9. versionCode 1
  10. versionName "1.0"
  11. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  12. }
  13. buildTypes {
  14. release {
  15. minifyEnabled false
  16. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  17. }
  18. }
  19. }
  20.  
  21. dependencies {
  22. compile fileTree(include: ['*.jar'], dir: 'libs')
  23. androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
  24. exclude group: 'com.android.support', module: 'support-annotations'
  25. })
  26. compile 'com.android.support:appcompat-v7:24.1.1'
  27. testCompile 'junit:junit:4.12'
  28. compile files('libs/classes.jar')
  29. }

五、修改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侧代码

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class Call : MonoBehaviour {
  5. string information_ = null;
  6.  
  7. void OnGUI() {
  8. //调用显示一个文本为“Hello World!”的Toest
  9. if(GUI.Button(new Rect(0, 0, 200, 20), "Show Toest - Hello World!")) {
  10. //Unity侧调用Android侧代码
  11. using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
  12. using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) {
  13. //调用成员方法
  14. jo.Call("ShowToast", "Hello World!");
  15. }
  16. }
  17. }
  18.  
  19. //获得插件侧的返回字符串
  20. if (GUI.Button(new Rect(0, 40, 200, 20), "Get Plugin's Information")) {
  21. //Unity侧调用Android侧代码
  22. using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
  23. using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) {
  24. //调用静态方法
  25. information_ = jo.CallStatic<string>("GetInformation");
  26. }
  27. }
  28. }
  29. //显示返回的字符串
  30. GUI.Label(new Rect(220, 40, Screen.width - 220, 20), information_);
  31. }
  32. }

四、导出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. 【zabbix】Windows服务器获取IIS站点以及程序池状态

    在使用zabbix做Windows服务器监控的时候遇到一个比较棘手的问题,检测IIS站点状态. 普通情况下,只要用浏览器访问iis站点测试一下返回码是不是200即可判断状态,但是我这次遇到的是iis使 ...

  2. Java for LeetCode 116 Populating Next Right Pointers in Each Node

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  3. A. Drazil and Date

    这是codeforces#292 div2 的一道题,因为本人比较水,目前只能做div2了.问题简化版就是: 从 (0,0) 走到 (a, b) ,s 步能不能走完.每次能向上下左右走,且只能走一步. ...

  4. NodeJs如何全局统一处理异常,实现RestFull风格

    当在controller中处理客户端发来的数据时,我们会去校验数据,当数据错误时,我们会给客户端返回一个信息,如: export function add (req, res, next) { con ...

  5. python的模块导入问题

    以下内容参考:http://www.xinxingjiaocheng.com/online/item/7/89 1.给模块起个别名 如果一个模块的名字很长很长,就像这样comput_the_value ...

  6. 关于for 循环里 线程执行顺序问题

    最近在做项目时遇到了 这样的需求 要在一个for循环里执行下载的操作, 而且要等 下载完每个 再去接着走循环.上网查了一些 觉得说的不是很明确.现在把我用到的代码 贴上 希望可以帮到有此需求的开发者  ...

  7. RQNOJ 569 Milking Time:dp & 线段问题

    题目链接:https://www.rqnoj.cn/problem/569 题意: 在一个数轴上可以摆M个线段,每个线段的起始终止端点给定(为整数),且每个线段有一个分值,问如何从中选取一些线段使得任 ...

  8. 【Lintcode】087.Remove Node in Binary Search Tree

    题目: Given a root of Binary Search Tree with unique value for each node. Remove the node with given v ...

  9. Python基础入门知识

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  10. PowerShell自动部署网站—(1)、安装IIS[添加角色和角色服务]

    #------添加角色/角色服务------ Import-Module servermanager $features = get-windowsfeature Net-*,Telnet-*,Web ...