AndroidStudio导出aar文件给Unity使用

作者:追风剑情 发布于:2017-4-13 17:35 分类:Unity3d

一、用Android Studio创建个空工程

333333.png

二、把classes.jar拷到libs下

E:\software\Unity5_5\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
拷到
D:\h5\GradleProjects\GameSupport\app\libs\classes.jar

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

三、把classes.jar添加进Dependencies

55555.png

4444444.png

四、删除res下多余的资源

66666.png

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

88888.png

7777.png

修改后的文件

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


六、修改AndroidManifest.xml

999999.png

修改后的文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.zwwx.game.gamesupport">
  4. <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  5. <application
  6. android:allowBackup="true"
  7. android:icon="@mipmap/ic_launcher"
  8. android:label="@string/app_name"
  9. android:roundIcon="@mipmap/ic_launcher_round"
  10. android:supportsRtl="true"
  11. android:theme="@android:style/Theme.NoTitleBar">
  12. <activity android:name=".MainActivity">
  13. <intent-filter>
  14. <action android:name="android.intent.action.MAIN" />
  15. <category android:name="android.intent.category.LAUNCHER" />
  16. </intent-filter>
  17. <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
  18. </activity>
  19. </application>
  20. </manifest>


七、修改MainActivity.java

  1. package com.zwwx.game.gamesupport;
  2.  
  3. import android.os.Bundle;
  4. import android.widget.Toast;
  5. import com.unity3d.player.UnityPlayerActivity;
  6.  
  7. public class MainActivity extends UnityPlayerActivity {
  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. }


八、生成arr

10.png

0000000.png

九、删除arr文件libs下的classes.jar

333333.png

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

44444.png

十一、创建test.cs

  1. using UnityEngine;
  2. public class Test : MonoBehaviour {
  3. void OnGUI()
  4. {
  5. if (GUI.Button(new Rect(200, 200, 200, 100), "Show Toest - Hello World!"))
  6. {
  7. AndroidHelper.Call("ShowToast", "Hello World!");
  8. }
  9. }
  10. }


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

22222.png

111111.png

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

  1. using System.Collections;
  2. using System;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Android;
  6. /// <summary>
  7. /// 与Android交互的辅助类
  8. /// </summary>
  9. public class AndroidHelper
  10. {
  11. #if UNITY_ANDROID && !UNITY_EDITOR
  12. #region 获得主活动类
  13. public static AndroidJavaClass MainActivity
  14. {
  15. get
  16. {
  17. try
  18. {
  19. AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  20. return player;
  21. }
  22. catch (Exception)
  23. {
  24. return null;
  25. }
  26. }
  27. }
  28. #endregion
  29.  
  30. #region 获得当前Android活动
  31. public static AndroidJavaObject currentActivity
  32. {
  33. get {
  34. try
  35. {
  36. AndroidJavaObject context = MainActivity.GetStatic<AndroidJavaObject>("currentActivity");
  37. return context;
  38. }
  39. catch (Exception)
  40. {
  41. return null;
  42. }
  43. }
  44. }
  45. #endregion
  46.  
  47. #region 获得Java类
  48. public static AndroidJavaClass JavaClass(string className)
  49. {
  50. try
  51. {
  52. AndroidJavaClass java_class = new AndroidJavaClass(className);
  53. return java_class;
  54. }
  55. catch (Exception)
  56. {
  57. return null;
  58. }
  59. }
  60. #endregion
  61.  
  62. #region 获得Java对象
  63. public static AndroidJavaObject JavaObject(string className, params object[] args)
  64. {
  65. try
  66. {
  67. AndroidJavaObject java_object = new AndroidJavaObject(className, args);
  68. return java_object;
  69. }
  70. catch (Exception)
  71. {
  72. return null;
  73. }
  74. }
  75. #endregion
  76. #endif
  77.  
  78. #region 调用Java类的实例方法
  79. public static void Call(string methodName, params object[] args)
  80. {
  81. #if UNITY_ANDROID && !UNITY_EDITOR
  82. currentActivity.Call(methodName, args);
  83. #endif
  84. }
  85.  
  86. public static T Call<T>(string methodName, params object[] args)
  87. {
  88. #if UNITY_ANDROID && !UNITY_EDITOR
  89. return currentActivity.Call<T>(methodName, args);
  90. #endif
  91. return default(T);
  92. }
  93.  
  94. public static void CallClass(string className, string methodName, params object[] args)
  95. {
  96. #if UNITY_ANDROID && !UNITY_EDITOR
  97. AndroidJavaObject java_object = JavaObject(className);
  98. java_object.Call(methodName, args);
  99. #endif
  100. }
  101.  
  102. public static T CallClass<T>(string className, string methodName, params object[] args)
  103. {
  104. #if UNITY_ANDROID && !UNITY_EDITOR
  105. AndroidJavaObject java_object = JavaObject(className);
  106. return java_object.Call<T>(methodName, args);
  107. #endif
  108. return default(T);
  109. }
  110. #endregion
  111.  
  112. #region 调用Java类的静态方法
  113. public static void CallStatic(string methodName, params object[] args)
  114. {
  115. #if UNITY_ANDROID && !UNITY_EDITOR
  116. MainActivity.CallStatic(methodName, args);
  117. #endif
  118. }
  119.  
  120. public static T CallStatic<T>(string methodName, params object[] args)
  121. {
  122. #if UNITY_ANDROID && !UNITY_EDITOR
  123. return MainActivity.CallStatic<T>(methodName, args);
  124. #endif
  125. return default(T);
  126. }
  127.  
  128. public static void CallClassStatic(string className, string methodName, params object[] args)
  129. {
  130. #if UNITY_ANDROID && !UNITY_EDITOR
  131. AndroidJavaClass java_class = JavaClass(className);
  132. java_class.CallStatic(methodName, args);
  133. #endif
  134. }
  135.  
  136. public static T CallClassStatic<T>(string className, string methodName, params object[] args)
  137. {
  138. #if UNITY_ANDROID && !UNITY_EDITOR
  139. AndroidJavaClass java_class = JavaClass(className);
  140. return java_class.CallStatic<T>(methodName, args);
  141. #endif
  142. return default(T);
  143. }
  144. #endregion
  145.  
  146. #region 申请权限
  147. /// <summary>
  148. /// 请求用户权限
  149. /// 权限常量:
  150. /// Permission.Camera 访问摄像头
  151. /// Permission.Microphone 访问麦克风
  152. /// Permission.CoarseLocation 获取粗略位置信息(只要能连接上基站就可以访问到)
  153. /// Permission.FineLocation 获取精确位置信息(如GPS)
  154. /// Permission.ExternalStorageRead 读存储卡
  155. /// Permission.ExternalStorageWrite 写存储卡
  156. /// </summary>
  157. /// <param name="permission">Permission中定义的权限常量字符串</param>
  158. public static void RequestUserPermission(string permission)
  159. {
  160. #if UNITY_ANDROID && !UNITY_EDITOR
  161. if (!Permission.HasUserAuthorizedPermission(permission))
  162. Permission.RequestUserPermission(permission);
  163. #endif
  164. }
  165. #endregion
  166.  
  167. #region 设置持续性能模式
  168. /// <summary>
  169. /// 设置持续性能模式。启用后,持续性能模式旨在在长时间内提供一致的性能水平。
  170. /// 长期运行的应用的性能可能会显著波动,因为系统会阻止系统芯片在设备组件达到温度限制时启动。
  171. /// 当应用失去焦点后会自动停止此模式。
  172. /// 使用条件:
  173. /// Android 7.0+
  174. /// </summary>
  175. /// <param name="enabled"></param>
  176. public static void SetSustainedPerformanceMode(bool enabled)
  177. {
  178. #if UNITY_2019_1_OR_NEWER && UNITY_ANDROID && !UNITY_EDITOR
  179. AndroidDevice.SetSustainedPerformanceMode(enabled);
  180. #endif
  181. }
  182. #endregion
  183. }


PS:推荐另一篇博文

http://www.cnblogs.com/xtqqkss/p/6387271.html

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号