Android Studio工程

配置Gradle路径

打开Android Studio,选择Customize选项,然后点击All settings

All Settings

在弹出的界面选择Build,Execution,Deployment——Build Tools——Gradle,设置Gradle的位置

Gradle

建立对应项目

打开Android Studio,点击“New Project”,在弹出的页面点击“Base Views Activity”,然后再在弹出的页面输入:

New Project

注意:包名一定要和Unity工程相同

新建项目后,会耗费大量的时间下载Gradle,可以使用腾讯的镜像来快速下载:

将项目的gradle——wrapper——gradle-wrapper .properties文件修改:

1
2
3
4
5
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

然后重启项目,等待下载完成。

Android Studio快捷键

Ctrl + Y:删除一行

Shift + Alt + 上下方向:移动一行

/**加回车:在方法上添加说明文字

Android Studio界面

Project窗口

在界面左侧的Project窗口有很多模式,常用的是Project和Android模式。前者能够显示工程内所有文件,后者只根据不同的类来显示文件。

Project 窗口

App的入口脚本位置:ResLoadPrg——app——src——main——java——com.DefaultCompany.ResLoadPrg——MainActivity

由于我们使用的是“Base Views Activity”模板,所以我们必须要修改一下MainActivity,让它变成一个空工程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.DefaultCompany.ResLoadPrg;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
}

}

修改成上图这样,其余的代码删掉。

如果com.DefaultCompany.ResLoadPrg文件夹内还有其他的java代码文件,都删掉,只保留MainActivity

jar和aar

安卓各个平台的接入流程是:

  1. 在Android Studio环境下接入各个平台的SDK,写好和Unity交互的类
  2. 将Android的代码工程导出为jar包
  3. Unity导入jar包和相关平台的依赖库(libs),最终由Unity导出为apk

jar包的主要内容就是纯安卓工程的代码,而arr包除了代码还包含资源和其他的依赖库。两种资源Unity都能使用,但是一般我们导出的只有jar包,防止arr包再接入其他SDK时出现问题。

使用jar包时要明确此jar包依赖的资源和库,否则在Unity打出来的包会无法运行。

生成jar

修改ResLoadPrg——app——build.gradle,修改plugins代码块和defaultConfig代码块,以及dependencies代码块(按照下面修改的同时将dependencies多余的部分删除)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
plugins {
//id 'com.android.application'
id 'com.android.library'
}

android {
namespace 'com.DefaultCompany.ResLoadPrg'
compileSdk 33

defaultConfig {
//applicationId "com.DefaultCompany.ResLoadPrg"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
}
}

dependencies {

implementation fileTree(includes: ['*.jar'],dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

此时点击菜单栏的“Build——ReBuild Project”,然后在build——intermediates——arr_main_jar——debug——classes.jar就是我们生成的jar包了。

拓展

我们可以使用终端,将生成的jar包单独提取出来。

修改build.gradle,在它的最后加

1
2
3
4
5
6
7
task makeJar(type:Copy){
delete 'build/libs/atao.jar'
from('build/intermediates/arr_main_jar/debug/')
into('build/libs/')
include('classes.jar')
rename('classes.jar','atao.jar')
}

顾名思义,这就是将classe.jar复制到build/libs/,并重命名为atao.jar

想要使用它,我们需要先修改一下Android Studio的设置,在菜单栏File——Settings打开设置窗口,然后点击Tools——Terminal,将Shell Parh改为“C:\WIndows\system32\cmd.exe”。

然后点击Android Studio底部的“Terminal”工具选项按钮,在打开的窗口中输入

1
E:\AndroidStudioProjects\ResLoadPrg>gradlew makejar

经测试,当我们使用gradle8.0时,它不能在Java8环境下启动上面的操作,所以这里只做记录了,如果想要成功运行,需要安装新的JDK。

另外,如果没有配置Gradle环境变量,系统可能会将gradle再次下载到C盘里,这里贴一个Gradle环境变量的设置。仅供参考。

添加系统变量:

1
2
变量名:GRADLE_HOME
变量值:E:\Gradle\wrapper\dists\gradle-8.0-all\a878bwjjv9e3gkwe16laniiuj\gradle-8.0

添加系统变量Path,添加一个Path:

1
%GRADLE_HOME%\bin

所以目前,我们直接拷贝build——intermediates——arr_main_jar——debug——classes.jar里面的jar包

对接Unity的准备

删除layout

首先,进入app——src——main——res——layout文件夹,将内部的xml文件全部删除。如果有弹窗,选择“Delete Anyway”

此时MainActivity.java会有报错,将setContentView(R.layout.activity_main);一行删掉即可,快捷键Ctrl + Y

导入Unity的jar

进入我们的UnityEditor安装目录,找到classes.jar,这里贴个路径供参考

D:\Program FIles\Unity Editor\2021.3.22f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes\classes.jar

Unity的mono和il2cpp都有自己的jar包,而且每个脚本后端的jar包都有Development版和Release版。根据自己的需要找一个就可以。

将这个jar包复制粘贴到安卓工程的app——libs文件夹里,并在弹窗中点击“ReFactor”或“OK”,并将”classes.jar”包改名为”unityclasses.jar”

此时如果编辑器窗口有提示(一行蓝条),点击右侧的sync;

如果没有,点击:File——Project Structure,点击左侧Dependencies,然后点击Modules里面的app,然后在右侧点击加号选择“AAR/JAR Dependency”,然后再在弹出的窗口的“Step1”里面输入libs\unityclasses.jar,点击OK确定即可

然后再次进入UnityEditor安装目录,找到UnityPlayerActivity.java,这里贴个路径供参考

D:\Program FIles\Unity Editor\2021.3.22f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player\UnityPlayerActivity.java

将这个java代码文件复制粘贴到安卓工程的app——src——main——java——com.DefaultCompany.ResLoadPrg内,弹出的窗口点击OK即可。

修改MainActivity

修改MainActivity代码文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.DefaultCompany.ResLoadPrg;

import android.os.Bundle;
import com.unity3d.player.*;

public class MainActivity extends UnityPlayerActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

}