最新-手把手教Unity2017.3 Android Studio3.0.1 SDK接入教程含jdk和sdk环境配置

本教程非常适合萌新,有大量的截图一步一步教下去。

网上有很多接入sdk的教程,但是有些时间过得久了,版本更新了,新手在跟着做的过程中可能会踩到很多坑。废话不多说,下面详细说一下该注意的事情。

目前unityjdk9的貌似不怎么兼容,这里采用jdk8(我这里用jdk-8u152-windows-x64, Android Studio3.0.1版本(我这里用android-studio-ide-171.4443003-windows)。Unity使用2017.3.0版本,版本需要申请签名的,2017.3.0版本则不需要。如使用的是之前的版本,请申请下秘钥库用于签名。

 

Jdk安装:

1. 安装JDKJRE,目录随意,不是同一个且记住就行。在Unity里设置正确即可

2. 安装完成后,点击计算机,右键,属性,高级系统选项,环境变量,系统变量,新建,JAVA_HOME变量,变量值选择或填写上面的JDK的安装目录。

 

3. 系统变量,找到Path变量(已经存在的),编辑,这里需要注意一下:原Path变量最后若已经有分号则不用加,否则先加一个分号再输入。在变量值最后输入JDK安装目录下的bin目录(可以直接输入也可以写成%JAVA_HOME%\bin)JRE安装目录下的bin目录,最后以分号结束。

 

4. 系统变量,新建,CLASSPATH变量,变量值填写以下内容

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

 

5. 运行cmd 输入 java -versionjavac -versionjavajavac-version 之间有空格

若显示版本信息 则说明安装和配置成功

 

SDK安装:

这个随意,记住安装路径即可,这里最好不要安装到C盘,后续项目大的话可能空间不够用。

优化下SDK的配置

 1.点击这里的Configure-SDK Manager

 

2.Android API27下的√都去掉,勾选下面Android 8.0(Oreo)下的3项(因为我已经配置好了,Android API27下的√这里就没有显示了),这里要等的时间比较久,请耐心等待完成配置。

 

3.这里的SDK Tools只选26.0.2,然后一路安装下去

 

配置好后开始创建安卓项目。

 

Package name 会收到Company domain的影响,下一步

 

这里API不能低于16,我这里选16,下一步

 

Empty Activity,下一步

 

点Finish,耐心等待加载完成。

 

上面的步骤完成后我们看到的是这种界面:

 

接下来创建一个Module,步骤File-New-New Module:

 

这里选择Android Library,下一步

 

 这里名称无所谓,自己可以随意写。需要注意的是下面的API不能低于16Finish

 

完成后是这样的格式:

 

接下来我们先回到Project

 

找到unityandroidlibrary(这个名称是自己创建Module是自已定义的)下的libs

 

把unity安装目录里的class.jar例:我unity2017.3.0的安装目录是

D:\unity2017.3\anzhuang\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

 

把这个classes.jar复制到上面图里的libs里,点OK

 

然后右键这个class.jar,Add As Library,OK

 

成功的话能看到这里是可以展开的。

 

接下来回到安卓,找到Java下的com.zmf.feiying.unityandroidlibrary(这种名称取决于你之前创建时的名称),右键,New-Activity-Empty Activity

 

这里把这个Launcher Activity勾选上,一会需要用到的,Finish等待加载完成

 

在开发过程中,必须将应用程序中出现的组件一一在 AndroidManifest.xml文件中申明,最终这个AndroidManifest.xml文件也会被一起打包到.apk文件中去。

 

这里我们给unity使用,该怎么写呢?这个时候上面的Empty Activity勾选的Launcher Activity的作用就体验出来了。打开app-manifests下的AndroidManifest.xml文件

 

把这里的application里的代码复制到自己工程里的AndroidManifest.xml,我们可以看到这里是报错的

 

这里把报错的全部删掉(也不一定要删,例如icon报错,这里的缺失一些文件导致的,这个是影响打包后的图片,添加上后也不会报错,这里不做这种功能,直接删掉)。还需要在intemt-filter下加上这句代码:<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>

最后得到这样的图

 

接下来回到我们之前创建的MainActivity里,把setContentView(R.layout.activity_main2);删掉

 

这里可以写unity需要调用的一些方法,因为需要和unity交互,这里需要继承UnityPlayerActivity(如果之前没有把unity安装目录下的class.jar包导入到libs里,或者导入错误什么的,这里的继承可能就会出错

我这里只写一个简单的加法运算,到时unity会调用这里的方法

 

另外res-layout下的这个xml文件也删掉,右键-delect-OK

 

接下来把这些配置文件什么的等等弄到Project里去。选择这个Library,上面的Build,Make Module.......

(这里可先不修改AndroidManifest.xml的信息)

Build完成后这些文件什么的到哪里去了呢?回到Project项目里,接下来我们需要对这些文件进行操作

 

1. libs里的classes.jar删掉(5.x以上的版本不把之前的classes删掉会报错的,因为有两个相同的包),然后把外面的classes.jar拉到libs里,到时libs文件夹和res文件夹以及manifests下的full-debug下的AndroidManifest.xml是需要放到unity里的。

这里我为了演示先把他们他们拉到桌面上(我已经把之前存在的classes.jar删掉了再把外面的包拉进libs文件夹里了)

 

 接下来需要对这个AndroidManifest.xml进行处理,我这里用notepad++把打开,得到是这个样子(我这个是build-Make Module.......没有处理的,先前处理的话也是一样的)

 

里面的package 的名称就是unity打包时的Package Name,这个必须一致的(另外不能写大写),不然会报错。

下面的android:label(默认不修改貌似也会报错)是打包后的程序名,优先级是比unity里的Product Name高级的(也就是说这里你写了名字,Unity里怎么写都是这个),我做了修改后如下

 

好了,接下来把桌面上的3个文件拖到unity下的Plugins/Android里。

 

接下来我们来写一下简单的代码:

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

 

public class Test : MonoBehaviour

{

    private Text text;

    private AndroidJavaClass aj;

    private AndroidJavaObject ao;

    void Start()

    {

        text = GetComponent<Text>();

        aj = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        //获取com.unity3d.player下的这个UnityPlayer类

        ao = aj.GetStatic<AndroidJavaObject>("currentActivity");

        //取得对象,这两句是固定写法,不理解也无所谓

 

        text.text = ao.Call<int>("add", 10, 20).ToString();

 

        //加法有返回值,AndroidJavaObject.Call可以调用有参数和无参数的方法,静态方法之类的,有返回值后面的是参数的类型

    }

}

把这个脚本挂到ugui一个Text组件上,进行打包,注意一下这里的Package Name要和AndroidManifest.xml下的package一致。Unity里的这个Product Name我随意写的,一会用于验证

 

 真机运行测试,得到我们想要的结果(不会真机测试或者没有安卓手机的同学们,可以在Android Studio里选tools-Android-AVD Manager进行创建)

 

 由此可见AndroidManifest.xmlandroid:label的优先级确实是高于unity里的项目名

 

这次是第一次发博客,Unity接入sdk就是这么简单,如有错误请提出。谢谢大家!!!

猜你喜欢

转载自blog.csdn.net/qq_37491893/article/details/79713374