这篇文章主要记述Android Studio 打出 jar 包供 Unity 使用的过程,主要参考的链接就是这篇《unity-与Android交互(unity5、android studio)》
整个过程分为 准备
- code
- 打包导入
一. 准备
Android Studio 和 Android SDK 的准备就不介绍了,这里出现了一个问题。当 SDK Tool 的版本为26时,Unity 将不能使用 SDK 打包。解决方法是降级 SDK。参考链接
- 创建新的 Android 工程
Note: 实际上我们只需要创建 Module,但是其必须依赖于某个项目目录中,所以创建的项目名称和包名都可以随意填写。
20170709204740.png- 之后一直下一步直至创建项目完成。此时我们点击
File
-New
-New Module
来创建新的模块
- 选择 Android Library 然后 Next。创建 Module 的名称可以随意填写,但是包名要与使用该 Module 的 Unity 项目相同
- 将 Unity 中的
class.jar
文件放入 Module 的libs
目录下,并为其添加依赖
eg: \Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
-
\AAA\nativeforandroid\libs
- 将此
class.jar
添加为依赖项,选中项目右键
-Open Module Settings
- 修改
build.gradle
选中这个 Module 的 build.gradle
文件,在最下放加入以下代码
```
task clearJar(type:Delete){
delete 'build/outputs/BB.jar'
delete 'build/outputs/AndroidManifest.xml'
}
task makeJar(type:Copy){
from('build/intermediates/bundles/default/') // 好多文章此处为 /bundles/release/ 但是我没有找到
into('build/outputs/')
include('classes.jar')
include('AndroidManifest.xml')
rename('classes.jar','NativeForAndroid.jar')
}
makeJar.dependsOn(build)
```
7.修改 AndroidManifest.xml
nativeforandroid/manifests/AndroidManifest.xml
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"> <!-- 包名 -->
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<!-- 添加此 activity 标签 -->
<activity android:name="com.example.Test">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--添加一下一行,否则 Unity打包时会报错-->
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
二. code
在 Module 中的 Java/包名(没有标记)
的文件夹下新建 Java Class。
eg: Test.java
package com.example;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayerActivity;
public class Test extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
// 定义一个显示Toast的方法,在Unity中调用此方法
public void ShowToast(final String displayString){
// 需要在UI线程下执行
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), displayString, Toast.LENGTH_LONG).show();
}
});
}
}
三. 打包导入
在 Android Studio 右上角找到 Gradle 按钮,在所在的模块下找到之前我们添加过的 clearJar
和 makeJar
命令
双击 makeJar
执行打包命令,等下方读条结束后,前往 \AAA\nativeforandroid\build\outputs
目录中找到打包好的 AndroidManifest.xml
和 NativeForAndroid.jar
。将它们拖入 Unity 项目目录 Assets/Plugins/Android/
下
调用
using System.Runtime.InteropServices;
...
void OnClick () {
var jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ShowToast", "Toast"); // 函数名,参数
}
...
参考链接
- Android Studio下打jar包及使用jar包
- unity-与Android交互(unity5、android studio)
- unity 打包报错 Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details.
- gradle 最后需要加 makeJar.dependsOn(build)
- AndroidStudio 导出关于Unity的Jar包
- Unity3D游戏开发之Unity与Android交互调用研究
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Unity Android Plugin开发指南
网友评论