Android Sqlite Unity3D 踩过的那些坑 & 全流程简介

时间:2021-11-13 17:57:59

 

全文较长,但是面面俱到的写了我遇到的很多问题,希望能帮到你

 

前言:

最近在弄网安实操结合的小游戏 Demo,跟老师目前讨论的是需要发布手机平台,第一步是Android平台,因为微信小程序表现不出那种真实感,所以继续用Unity3D进行开发。虽然我对unity3d有过几年的开发经验,但是没有真正接触过手机平台,都是在PC和web端。接下来是踩过的那些坑,更多的是跟sqlite相关的。

最后卡住我的问题是这个 android - Unity SQLite conection unable to open database file - Stack Overflow 在这个问题上,我卡了很久,一天差不多得有了,幸好最后解决了,没白瞎这些功夫,利用这些时间,也弄懂了许多地方,接下来一一道来:

一、发布Android到底需要多少dll和so文件

首先要知道的是dll文件是干啥用,中文是动态链接库,简单的说就是,提前做好的一些函数放在里面了,然后程序可以从里面调用,问题是,实际上 dll 是windows平台下的概念,也就是说如果在PC下运行的好好的,到了Android运行有问题,那么一定是so文件的问题,而不是dll文件的问题。

然后,so文件是什么呢,是给Android用的,在pc环境下有没有或者对不对,对Editor运行的结果都没有影响。so文件其实可以理解为Linux的动态链接库。因为Android和Linux的架构是一致的,所以才会用到so文件。

  • 针对sqlite3我们需要这几个文件:Mono.Data.Sqlite.dll(从对应版本的unity目录 UnityEditorDataMonoBleedingEdgelibmono2.0 中复制) 和 sqlite3.dll(从官网 https://www.sqlite.org/download.html 中下载适合开发用电脑的版本,而不是Android版本)
  • 针对发布Android平台,我们需要再加这几个文件:System.Data.dll(从对应版本的unity目录 UnityEditorDataMonoBleedingEdgelibmono2.0 中复制) 和 libsqlite3.so(在此下载

二、dll文件和so文件的配置问题

首要问题是下载正确的版本,上一节已经讲了,然后现在需要做的是在Unity中配置相关的属性,这里需要提的一点是版本!Unity3D的版本!并不是所有版本都是稳定的,比如我以前的随笔中提到过的发布web GL的问题:IL2CPP问题,就是个版本问题,不过Android的目前看来是最新的稳定版本肯定最好用。我现在是 2019.2.0 版本,导出的APK无误。

Mono.Data.Sqlite.dll 和 sqlite3.dll文件的配置都是一样的:

Android   Sqlite   Unity3D 踩过的那些坑 & 全流程简介

System.Data.dll文件的配置:因为这个是只给Android用的,需要打包在包里,而在PC环境中不需要,所以只选择安卓平台。如果全平台,会跳红bug,在2017版本中是没有这个bug的,在2019版本中就有了,我是在升级之后遇到的这个问题,就是告诉你这个文件多余的意思,这时候不要删除,虽然unity editor测试很好,但是apk之后没有这个文件,程序依旧GG,请如下配置。

Android   Sqlite   Unity3D 踩过的那些坑 & 全流程简介

libsqlite3.so文件的配置:正如我前文提到的so文件对应平台的,在旧的unity版本中,发布Android是全平台的,也就是说unity3d默认你的so也适应全平台,但是网上下载的这里的so文件只对应armv7平台(也就是主流的平台,v8向下兼容),故应该这样配置。

Android   Sqlite   Unity3D 踩过的那些坑 & 全流程简介

如果so文件配置不好,很容易出现下图的问题 Database is not open ******balabala

Android   Sqlite   Unity3D 踩过的那些坑 & 全流程简介

三、发布时候需要注意的事项

两个常见打包问题在另一篇随笔中有提到,一个是打包位置的问题,一个是net 2.0的问题然后这里还有个问题是:一定要在Project setting 的 Player setting中的other setting的configuration中勾掉不需要的平台也就是这里:

Android   Sqlite   Unity3D 踩过的那些坑 & 全流程简介

四、这四个所需的文件应该放在哪里?

现在网上的大多数说法,其实都在照搬,也没说为什么。实际上dll文件和so文件确实就要放在一个Plugins文件夹下,需要打包的属于需要配置的文件都要放在这里面,然后.db数据库文件就不需要那样复杂了,可以像我这样放在Asset/Android下的assets下,也可以放在Assets新建的StreamingAssets下,都是可以的,只要最后Android平台的时候能获取并复制到就ok了。

Android   Sqlite   Unity3D 踩过的那些坑 & 全流程简介

 

还在开发中,肯定还会遇到其他问题,未完待续。。。