金沙澳门官网jin5888:ANT自动打包U3D安卓项目研究笔记,游戏开发的个人经历和一些经验

  这是在博客园的第一篇随笔,审核速度相当快,索性写一篇记录一下吧。

这篇文章主要记述Android Studio 打出 jar 包供 Unity
使用的过程
,主要参考的链接就是这篇《unity-与Android交互(unity5、android
studio)》

概述

因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务。在此将研究过程及一些相关知识整理记录在此。

本文部分内容可以说就是Android和Ant自动打包的配置,只是在其基础上扩充了Unity3D的部分。

金沙澳门官网jin5888:ANT自动打包U3D安卓项目研究笔记,游戏开发的个人经历和一些经验。阅读本文需要:知道Android开发环境大概需要哪些东西,知道Unity3D编辑器的基本使用方法。

本文并不是系统学习Ant以及Android自动打包的文章,只是笔者通过网络搜索一系列文章,然后通过自己测试通过后的一篇文章总结,搜索时关键词变化大致如下:

Unity Ant -> Android Ant -> Unity Android Studio -> Eclipse Ant
-> Android Ant。

金沙澳门官网jin5888:ANT自动打包U3D安卓项目研究笔记,游戏开发的个人经历和一些经验。这些关键词一定程度上反应了笔者研究Ant和Unity
Android打包的思路,通过这些关键字搜到的比较有用的文章链接也会在下面列出来。

  作为一名Unity3d的工程师,入行一年有余,在第二家公司也待了两个多月。入行以来,对软件开发行业,尤其是游戏行业有了不一样的认识,写点东西给刚入职和想要入职的萌新们以及将来的自己。

整个过程分为 准备code金沙澳门官网jin5888:ANT自动打包U3D安卓项目研究笔记,游戏开发的个人经历和一些经验。 – 打包导入

金沙澳门官网jin5888:ANT自动打包U3D安卓项目研究笔记,游戏开发的个人经历和一些经验。0.准备环境

主要介绍使用软件及环境的相关配置。

个人使用系统为Windows 10。

  科班出身的我刚毕业时,并不打算安心做个程序员,可能是黑程序员的段子太多,在朋友一句“干嘛不去游戏公司”的启发下,就进了一家中等规模的游戏公司,虽然工资不高,也就5k,但直到现在,我还是很感谢这家公司,至于原因,后面再说。当然,萌新们也别太灰心,这个工资算是业界较低的水准,就算是同一集团下的另一家工资水平,也比这家高出2k左右,主要之前吃过给新人高薪的亏,所以刚进来无论学校如何,都是按统一标准给的,地理位置是南京,也不算是高工资水平的城市。这一年接手过三个游戏项目,当然,都是很成熟的框架,主要是做UI、换皮、修Bug、做新活动,所以作为新人,要有这样的心理准备,尤其在当下粗暴发展的手游行业,想做一个引擎的研发,可能整个职业生涯都很遇到几次,当然,这也是我入行半年,有些急躁的地方,一方面做着有些低级的工作,一方面对自己的构建能力十分盲目自信。

一. 准备

Android Studio 和 Android SDK 的准备就不介绍了,这里出现了一个问题。当
SDK Tool 的版本为26时,Unity 将不能使用 SDK 打包。解决方法是降级
SDK。参考链接

  1. 创建新的 Android 工程

Note: 实际上我们只需要创建
Module,但是其必须依赖于某个项目目录中,所以创建的项目名称和包名都可以随意填写。

金沙澳门官网jin5888 1

20170709204740.png

  1. 之后一直下一步金沙澳门官网jin5888:ANT自动打包U3D安卓项目研究笔记,游戏开发的个人经历和一些经验。直至创建项目完成。此时我们点击 FileNew
    New Module 来创建新的模块

金沙澳门官网jin5888 2

$SG@KRX%7BC%YSHV6XET17M.png

  1. 选择 Android Library 然后 Next。创建 Module
    的名称可以随意填写,但是包名要与使用该 Module 的 Unity 项目相同

金沙澳门官网jin5888 3

588NUK$_118D74LR(K8~JX4.png

  1. 将 Unity 中的 class.jar 文件放入 Module 的 libs
    目录下,并为其添加依赖

eg:

0.1 使用软件

下面介绍使用相关软件,每个软件都链接到其官方的下载页面,这些页面至少在公元2016年2月份是可用的。

1.Unity3D

2.JDK

3.ADT BUNDLE (ADT
Bundle包括Eclipse、ADT插件和SDK Tools)

4.Apache Ant

这里需要特别说明的是ADT BUNDLE我给的是国内android
studio社区中的ADT下载页面,个人认为该社区的Android环境资源可以说是国内比较全的。开始其实准备是用Android
Studio做开发,但是没太接触过Android
Studio,貌似U3D导出的Android工程不能直接使用,所以暂时放弃。

其他相关软件如有失效请到其官网下载。

  就我其他同学的工作来看,游戏开发已经比同期的其他软件开发复杂许多,对于一些小型软件公司来说,有一套不知从哪里来的祖传源码,你所要做的只是去给客户安装调试或者针对客户的需求做些小的修改,对于大型公司来说,新人有更充沛的时间和资源去学习,并且总有一帮技术大佬坐在哪里给你信心。而对于中小型的游戏公司来说,一个团队就这么十几个人,每个人的关注点都不大一样,即使是技术大佬,也有不少技术盲点,你所能依靠的只有网络和自己。好在游戏开发并不算那么严谨的软件,真的遇到一些技术障碍,只要不影响运行,删几个需求也不是不可能,当然这种情况还是不要发生为何,这会有损自己和公司的形象。

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

\AAA\nativeforandroid\libs

  1. 将此 class.jar 添加为依赖项,选中项目右键
    Open Module Settings

金沙澳门官网jin5888 4

金沙澳门官网jin5888 5

金沙澳门官网jin5888 6

  1. 修改 build.gradle

金沙澳门官网jin5888 7

20170709213222.png

选中这个 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>

0.2 环境配置

主要介绍软件安装完成后的配置,包括一些插件的下载安装。这里就不介绍上一小节提到的软件安装流程了,基本都是点击exe默认安装或者解压即可用的软件。

  后半年主要做移动平台相关的支持,也就是SDK对接和安卓苹果原生功能的开发,当然都是Unity游戏开发相关的,这半年几乎没有在10点前下过班。作为开发的最后一环,所有的Bug都会先到我这里,理论上不是由我负责的部分,因为找不到当初负责这部分的人,所以只能去帮着修改,另外海外公司的对接文档,也是非常糟糕的,后来我会直接去把对方公司的技术拉进一个小群里讨论,有时候运营同学夹在中间,真的有些碍事,所以直接和技术讨论,是最有效的快速解决问题的办法,而不是拖个好几天,才得到一个不准确的反馈。

二. code

在 Module 中的 Java/包名(没有标记) 的文件夹下新建 Java Class。

eg: Test.java

金沙澳门官网jin5888 8

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();
            }
        });
    }
}

0.2.1 环境变量配置

1.右击桌面【此电脑(这台电脑、计算机、我的电脑)】,然后点击【属性】-【高级系统设置】-【高级】-【环境变量】

金沙澳门官网jin5888 9

2.通过点击下方的新建,添加ANDROID_HOME,ANT_HOME,CLASSPATH,JAVA_HOME几个变量(变量值请根据自己安装软件的位置决定),其中ANDROID_HOME设置的是ADT
Bundle压缩包中的sdk目录,这里列出我个人系统设置的值作为参考。

ANDROID_HOME
D:\developtools\Android\sdk

ANT_HOME
D:\developtools\apache-ant-1.9.6

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

JAVA_HOME
D:\developtools\Java\jdk1.8.0_74

3.扩充Path环境变量,使得一些命令能在命令行执行

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%ANT_HOME%\bin;%ANT_HOME%/lib;%ANDROID_HOME%/tools;%ANDROID_HOME%/platform-tools

4.添加完成后,点击确定关闭环境变量对话框,Win+R,输入CMD打开命令行,输入java
-version,ant -version,android
-h等命令,如果能得到类似下面的显示,那么环境配置基本通过,否则请检查环境变量配置是否有误。

C:\Windows\System32>java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

C:\Windows\System32>ant -version
Apache Ant(TM) version 1.9.6 compiled on June 29 2015

C:\Windows\System32>android -h

       Usage:
       android [global options] action [action options]
       Global options:

  最后也带了两个新人,当然,我不是一个脾气好懂得如何教别人的人,说实话,新人真的很糟糕,所以这也是我感谢给我第一份工作的东家的原因,因为把一个刚毕业没有经验的学生培养成能独立完成工作的同事,是一件劳心劳力费时的苦差事,比遇到技术问题还煎熬。游戏开发,速度意味着更多的市场和更多的钱,当然这不绝对,但第一个公司的策略就是如此,上线赚到钱再说,赚不到就马上投入一个新的项目,总会有几个项目赚够本钱。因而,每天的工作量是很大的,当然,不要想着是那种弹尽竭虑的工作状态,大多数工作都是不想干的琐事,比如,这个图集丢失,这段文字再往上挪点,这个按钮响应区域有点小,这往往都是一些小疏忽或者在程序眼中无关游戏流量的小事情,但这就是游戏行业的日常。

三. 打包导入

在 Android Studio 右上角找到 Gradle
按钮,在所在的模块下找到之前我们添加过的 clearJarmakeJar 命令

金沙澳门官网jin5888 10

K$X)B5BBEIAYID_1FT$NXDO.png

双击 makeJar 执行打包命令,等下方读条结束后,前往
\AAA\nativeforandroid\build\outputs 目录中找到打包好的
AndroidManifest.xmlNativeForAndroid.jar。将它们拖入 Unity
项目目录 Assets/Plugins/Android/

金沙澳门官网jin5888 11

0.2.2 SDK下载

打开ADT BUNDLE中的 SDK
Manager.exe,下载需要的SDK,一般下载Android一个版本就够了,在写本文的时候谷歌还没有回归天朝,所以下载SDK需要FQ。如果还没有FQ的能力,那么可以参考国内Android
Studio社区的代理镜像页面:

如果该页面或者该页面上的资源失效且谷歌还存在墙的问题,那么,请自行寻找其他源。

  虽然离职前给了丰厚的待遇,但我还是选择回家休息一段时间,作为终身事业,我想我不能失去对游戏制作的热情,所以打算自己开发点什么或者只是单纯的休息。一年的开发工作,让我知道书本的例子和工业化的标准间的差距,我的编程水平、工具应用能力、编程的意识有了很大的进步,但是我却不知道该写点什么,于是一边休息,一边学习,一边开发一些觉得以后能用上的工具。我终于意识到,我不仅需要学习开发,还要学习设计,仅仅开发他人的需求,很难得到快乐。就如同离职前我回答领导的,假如兴趣和工作能结合在一起,即使不存在,我也想先找找看。

调用

using System.Runtime.InteropServices;

...

  void OnClick () {
     var jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
     var jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

     jo.Call("ShowToast", "Toast"); // 函数名,参数
  }
...

0.2.3 扩展包ant-contrib

ant-contrib包可以让ant支持较为复杂的逻辑功能,比如循环和流程判断。下载地址:

下面环境中使用的是1.0b3的zip版本。(Linux可以通过命令安装,具体请自行查找)。

下载完成后将zip包中ant-contrib-1.0b3.jar解压到ant目录中的lib目录下。

  很遗憾,新的公司尽管是一家创业公司,还是没能有我需要的那股热情,但是作为一个成年人,必须考虑生活成本和工作职责。游戏内容没有让我获得成就感,我们依然可以在技术中找到乐趣,任何积累都不是无意义的,当然,我也开始学习游戏设计,希望有一天我的职称不再是一个工程师,而是一个游戏设计开发工程师。以上就是我大致的入行经历,希望能给萌新们一点参考,另外,现在的薪资也有1w4k,一年的时间增长了将近三倍,地点是在上海,所以只要付出一点点努力,对技术有一点点强迫症,在游戏行业还是有发展空间的。个人经历不能完全代表整个行业,仅仅作为参考。

参考链接

  • 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开发指南

0.2.4 相关参考链接

这里放置一些其他的环境搭建、相关知识的链接(有些将来可能失效)。本文部分内容也参考了这些文章。

1.android开发环境配置

2.Android
ant自动打包脚本

3.Unity3D研究院之Android使用ANT自动打包

4.windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

  之前在其他论坛也零零散散地写过一些技术贴,大多为工作中的一些难点和网上没有完整正确的答案的相关技术流程,因为最近在学习游戏原型开发,所以会有相关的文章,可能技术方面会比较简单,但是独立开发游戏真的没有想的那么容易,至少目前还没做一款好游戏的方法论,我会写一些设计方面的心得和开发上的难点。如果有时间,我也会把我最近在开发的,也是公司需要用的移动平台原生的工具箱放上来,这方面我也不是专家,但在Unity游戏开发团队中,起码能派上用场,但是我会确保能适配各版本的移动端,同时在优化框架等方面做到尽可能的完美,当然,整个规模很小,只是一些小的注意点。

1.项目主体

这里介绍U3D创建项目、Eclipse导入项目的生成Ant的相关内容。

  另外,两个月前我认识了一个让我心动的女孩,她小我6岁,今年正好18,各位不要喷我,萝莉控而已,一个月前开始约会,每天都能见面,几乎每周双休都在一起,我也把时间更多的倾斜到生活中,希望能一直走下去。我觉得自己很幸福,与同行业的同学相比,方向是喜欢的游戏开发,技术能力也比其他方向的高出很多,而且也没有苦行僧式的程序员生活模式,有个美丽可爱的小萝莉陪着我。

1.1 U3D部分

这里测试的Unity3D版本为5.3。

下面操作中可能会要求选择Android
SDK目录,请选择ADT BUNDLE中的SDK目录。

1.打开Unity3D创建一个新项目,创建完成后直接保存默认的场景。然后点击菜单【File】-【Build
Settings…】,点击【Add Open Scenes】,选择Android并点击【Switch
Platform】:

金沙澳门官网jin5888 12

2.点击Player Settings,点击Other Settings,设置下包信息:

金沙澳门官网jin5888 13

3.勾上Building Setting界面的Google Android
Project,然后点击Export,选择一个可用的项目空目录,完成Android工程的导出。

金沙澳门官网jin5888 14

相关文章