AndroidStudio导出aar文件给Unity使用

AndroidStudio导出aar文件给Unity使用

本文参考 :http://www.devacg.com/?post=548

Demo地址:https://github.com/JulyNine/AndroidToUnity

一、用Android Studio创建个空工程 注意:包名要与Unity中工程的包名不一致,不然打包时会报错multi dex

333333.png

二、把classes.jar拷到libs下

C:\Soft\UnityHub\2019.2.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar(自己Unity安装路径)
拷到
C:\Users\July\AndroidStudioProjects\Fakemiss\app\libs\classes.jar(新建的android工程路径)

注意:以上是我的安装目录和工程目录。

三、把classes.jar添加进Dependencies

55555.png

4444444.png

四、删除res下多余的资源(重要,不然打包的时候会报错:link resource error)

删除layout文件夹 以及values文件夹下的style.xml

66666.png

五、修改build.gradle文件才能生成aar

88888.png

7777.png

修改后的文件

//apply plugin: 'com.android.application'
apply plugin: 'com.android.library'android {compileSdkVersion 25buildToolsVersion "25.0.2"defaultConfig {//applicationId "com.zwwx.game.gamesupport"minSdkVersion 15targetSdkVersion 25versionCode 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:25.3.1'compile 'com.android.support.constraint:constraint-layout:1.0.2'testCompile 'junit:junit:4.12'compile files('libs/classes.jar')
}

六、修改AndroidManifest.xml

999999.png

修改后的文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.zwwx.game.gamesupport"><uses-permission android:name="android.permission.INTERNET"></uses-permission><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@android:style/Theme.NoTitleBar"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application>
</manifest>

 

七、修改MainActivity.java

package com.zwwx.game.gamesupport;import android.os.Bundle;
import android.widget.Toast;
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();}});}
}

 八、生成arr

10.png

0000000.png

九、删除arr文件libs下的classes.jar(特别注意别删错了,是libs文件夹下的classes.jar,不是根目录下的)

333333.png

十、把aar和AS工程中的AndroidManifest.xml拷到Unity工程下

44444.png

十一、创建test.cs

using UnityEngine;
public class Test : MonoBehaviour {void OnGUI(){if (GUI.Button(new Rect(200, 200, 200, 100), "Show Toest - Hello World!")){AndroidHelper.Call("ShowToast", "Hello World!");}}
}

十二、设置好Player Settings,然后打包测试

22222.png

111111.png

十三、最后赠送一个Unity中调用java方法的辅助工具类

using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 与Android交互的辅助类
/// </summary>
public class AndroidHelper
{#if UNITY_ANDROID && !UNITY_EDITOR#region 获得主活动类public static AndroidJavaClass MainActivity{get{try{AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");return player;}catch (Exception){return null;}}}#endregion#region 获得当前Android活动public static AndroidJavaObject currentActivity{get {try{AndroidJavaObject context = MainActivity.GetStatic<AndroidJavaObject>("currentActivity");return context;}catch (Exception){return null;}}}#endregion#region 获得Java类public static AndroidJavaClass JavaClass(string className){try{AndroidJavaClass java_class = new AndroidJavaClass(className);return java_class;}catch (Exception){return null;}}#endregion#region 获得Java对象public static AndroidJavaObject JavaObject(string className, params object[] args){try{AndroidJavaObject java_object = new AndroidJavaObject(className, args);return java_object;}catch (Exception){return null;}}#endregion#endif#region 调用Java类的实例方法public static void Call(string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORcurrentActivity.Call(methodName, args);#endif}public static T Call<T>(string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORreturn currentActivity.Call<T>(methodName, args);#endifreturn default(T);}public static void CallClass(string className, string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORAndroidJavaObject java_object = JavaObject(className);java_object.Call(methodName, args);#endif}public static T CallClass<T>(string className, string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORAndroidJavaObject java_object = JavaObject(className);return java_object.Call<T>(methodName, args);#endifreturn default(T);}#endregion#region 调用Java类的静态方法public static void CallStatic(string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORMainActivity.CallStatic(methodName, args);#endif}public static T CallStatic<T>(string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORreturn MainActivity.CallStatic<T>(methodName, args);#endifreturn default(T);}public static void CallClassStatic(string className, string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORAndroidJavaClass java_class = JavaClass(className);java_class.CallStatic(methodName, args);#endif}public static T CallClassStatic<T>(string className, string methodName, params object[] args){#if UNITY_ANDROID && !UNITY_EDITORAndroidJavaClass java_class = JavaClass(className);return java_class.CallStatic<T>(methodName, args);#endifreturn default(T);}#endregion
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity C# Job System介绍(四) 并行化Job和故障排除(完结)

并行化job ParallelFor jobs​docs.unity3d.com 当调度Jobs时&#xff0c;只能有一个job来进行一项任务。在游戏中&#xff0c;非常常见的情况是在一个庞大数量的对象上执行一个相同的操作。这里有一个独立的job类型叫做IJobParallelFor来处理此类问题。ParallelFor jobs当调…

C# Job System

概述 设计目的&#xff1a;简单安全地使用多线程&#xff0c;随便就能写出高性能代码 收益&#xff1a;FPS更高&#xff0c;电池消耗更低&#xff08;Burst编译器&#xff09; 并行性&#xff1a;C# Job System和Unity Native Job System共享工作线程worker threads&#xf…

Unity游戏开发——C#特性Attribute与自动化

这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景。 比如你把玩家的血量、攻击、防御等属性写到枚举里面。然后界面可能有很多地方要根据这个枚举获取属性的描述文本。 比如你做网络框架的时候&#xff0c;一个协议号对应一个类的处理或者一个方法。 比如你做…

Unity c#中Attribute用法详解

举两个例子&#xff0c;在变量上使用[SerializeFiled]属性&#xff0c;可以强制让变量进行序列化&#xff0c;可以在Unity的Editor上进行赋值。 在Class上使用[RequireComponent]属性&#xff0c;就会在Class的GameObject上自动追加所需的Component。 以下是Unity官网文档中找…

走进LWRP(Universal RP)的世界

走进LWRP&#xff08;Universal RP&#xff09;的世界 原文&#xff1a;https://connect.unity.com/p/zou-jin-lwrp-universal-rp-de-shi-jie LWRP自Unity2018发布以来&#xff0c;进入大家视野已经有一段时间了&#xff0c;不过对于广大Unity开发者来说&#xff0c;依然相对…

Unity 2017 Game Optimization 读书笔记(1)Scripting Strategies Part 1

1.Obtain Components using the fastest method Unity有多种Getcomponet的方法&#xff1a; GetComponent(string), GetComponent<T>() GetComponent(typeof(T)) 哪种效率最高会跟随Unity版本的变化而变化&#xff0c;对于Unity 2017&#xff0c;本书作者的测试是Ge…

C# 多态相关的文章

一 C# 多态的实现 封装、继承、多态&#xff0c;面向对象的三大特性&#xff0c;前两项理解相对容易&#xff0c;但要理解多态&#xff0c;特别是深入的了解&#xff0c;对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践&#xff0c;封装、继承在…

C++ 虚函数和虚表

几篇写的不错的文章&#xff0c;本文是整合了这几篇文章&#xff0c;感谢这些大佬 https://www.jianshu.com/p/00dc0d939119 https://www.cnblogs.com/hushpa/p/5707475.html https://www.jianshu.com/p/91227e99dfd7 多态: 多态是面相对象语言一个重要的特性,多态即让同一…

Unity 2017 Game Optimization 读书笔记(2)Scripting Strategies Part 2

1. Share calculation output 和上一个Tip很像&#xff0c;可以缓存计算结果或者各种信息&#xff0c;避免多次重复的计算&#xff0c;例如在场景里查找一个物体&#xff0c;从文件读取数据&#xff0c;解析Json等等。 容易忽略的点是常常在基类了实现了某个方法&#xff0c;在…

Unity 2017 Game Optimization 读书笔记(3)Scripting Strategies Part 3

1.Avoid retrieving string properties from GameObjects 通常来讲&#xff0c;从C#的object中获取string 属性没有额外的内存开销&#xff0c;但是从Unity中的Gameobject获取string属性不一样&#xff0c;这会产生上一篇讲到的 Native-Managed Bridge&#xff08;Native内存和…

Unity 2017 Game Optimization 读书笔记(4)Scripting Strategies Part 4

1.Avoid Find() and SendMessage() at runtime SendMessage() 方法和 GameObject.Find() 相关的一系列方法都是开销非常大的。SendMessage()函数调用的耗时大约是一个普通函数调用的2000倍&#xff0c;GameObject.Find() 则和场景的复杂度相关&#xff0c;场景越复杂&#xff0…

Unity HDRP中的光照烘焙测试(Mixed Lighing )和间接光

部分内容摘抄自&#xff1a;https://www.cnblogs.com/murongxiaopifu/p/8553367.html 直接光和间接光 大家都知道在Unity中&#xff0c;我们可以在场景中布置方向光、点光、聚光等类型的光源。但如果只有这些光&#xff0c;则场景内只会受到直接光的影响&#xff0c;而所谓的…

聊聊Unity项目管理的那些事:Git-flow和Unity

感谢原作者https://www.cnblogs.com/murongxiaopifu/p/6086849.html 0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了。敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理。项目从最初使用svn到之后的Git One Track策略再到现在的GitFlow策略&#xff0c;中…

聊聊网络游戏同步那点事

写的非常好的一篇博文&#xff0c;转载自https://www.cnblogs.com/murongxiaopifu/p/6376234.html 0x00 前言 16年年底的时候我从当时的公司离职&#xff0c;来到了目前任职的一家更专注于游戏开发的公司。接手的是一个platform游戏项目&#xff0c;基本情况是之前的团队完成…

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(1)

The Rendering Pipeline 渲染表现差有可能取决于CPU端&#xff08;CPU Bound&#xff09;也有可能取决于GPU(GPU Bound).调查CPU-bound的问题相对简单&#xff0c;因为CPU端的工作就是从硬盘或者内存中加载数据并且调用图形APU指令。想找到GPU-bound的原因会困难很多&#xff…

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(2)

Lighting and Shadowing 现代的游戏中&#xff0c;基本没有物体能在一步就完成渲染&#xff0c;这是因为有光照和阴影的关系。光照和阴影的渲染在Fragment Shader中需要额外的pass。 首先要设置场景中的Shadow Casters和Shadow Receivers&#xff0c;Shadow Casters投射阴影&…

Unity 2017 Game Optimization 读书笔记 The Benefits of Batching

batching&#xff08;合批&#xff09; 和大量的描述一个3D物体的数据有关系&#xff0c;比如meshes&#xff0c;verices&#xff0c;edges&#xff0c;UV coordinates 以及其他不同类型的数据。在Unity中谈论batching&#xff0c;指的是用于合批mesh数据的两个东西&#xff1a…

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (3)

Rendering performance enhancements Enable/Disable GPU Skinning 开启GPU Skinning可以减轻CPU或GPU中Front End部分中某一个的负担&#xff0c;但是会加重另一个的负担。Skinning是mesh中的顶点根据动画中骨骼的当前位置进行计算&#xff0c;从而让角色摆出正确的姿势。 …

Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用

原文&#xff1a;https://zhuanlan.zhihu.com/p/28644618 0. 前言 项目技术测试结束之后&#xff0c;各种美术效果提升的需求逐渐成为后续开发的重点&#xff0c;角色效果部分的提升目标之一便是在角色选择/展示界面为玩家提供更高的品质感&#xff0c;于是可以提供动态效果的…

行为树(Behavior Tree)实践(1)– 基本概念

原文&#xff1a;http://www.aisharing.com/archives/90 行为树&#xff08;Behavior Tree&#xff09;实践&#xff08;1&#xff09;– 基本概念 自从开博以来&#xff0c;每天都会关心一下博客的访问情况&#xff0c;看到一些朋友的订阅或者访问&#xff0c;不胜欣喜&…