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



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


前言:

最近在弄网安实操结合的小游戏 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目录 Unity\Editor\Data\MonoBleedingEdge\lib\mono\2.0 中复制) 和 sqlite3.dll(从官网 https://www.sqlite.org/download.html 中下载适合开发用电脑的版本,而不是Android版本)
  • 针对发布Android平台,我们需要再加这几个文件:System.Data.dll(从对应版本的unity目录 Unity\Editor\Data\MonoBleedingEdge\lib\mono\2.0 中复制) 和 libsqlite3.so(在此下载

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

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

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

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

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

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


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

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


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

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

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

原文地址:https://www.cnblogs.com/wayne-tao/p/11347233.html

时间: 2024-08-03 05:48:34

Android + Sqlite + Unity3D 踩过的那些坑 & 全流程简介的相关文章

[原创] 关于免费VPN我踩过的那些坑

关于免费VPN我踩过的那些坑 因为工作的关系,笔者经常需要用到VPN, 访问国外国网站,你懂的. 我曾经试着自己购买VPS搭建过VPN, 被封了后就没心情再维护了,毕竟直接买VPN比VPS便宜太多.时间一长,也就有了一些经验. 这里总结成表格的形式,分享给大家: [NydusVPN] 知乎推荐的香港VPN, 比直通车好,线路稳定性好,办公游戏适合.注册前7天内可以无条件退款哦.  官方网站  [Astrill] 老牌VPN,但近两年被封底得太厉害,现在已经不太给力了. 注册第一个月能免费使用(付

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

phonegap开发app中踩过的那些坑

把遇到的问题列出来,如果有解决方案的,偶也会写下来,如果大家有更好解决方法的,欢迎留言噢 phonegap 2.9无法触发deviceready事件 亲们可以看下控制台有木有报错,如果有提示cordova_plugins.json 404 (Not Found) ,就在www目录下新建个空文件,命名为cordova_plugins.json就好了,cordova初始化的时候会请求这个文件,但po主还没发现这个文件有啥用,但是没有这个文件的话,cordova初始化失败,自然不会触发devicere

Android sqlite cursor的遍历

查询并获得了cursor对象后,用while(corsor.moveToNext()){}遍历,当corsor.moveToNext()方法调用,如果发现没有对象,会返回false public List<MMImage> getAll() { List<MMImage> list = new ArrayList<MMImage>(); Cursor c = null; try { c = database.query(TABLE, null, null, null,

【原创】android——SQLite实现简单的注册登陆(已经美化)

1,Main_activity的xmL配置 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_pa

Android中隐藏顶部状态栏的那些坑

Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除title requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的状态栏 getWindow().setFlags(WindowManager

Android Sqlite的操作

1.写一个类继承SQLiteOpenHelper public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { super(context, Const.DB_DBNAME , null, Const.DB_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteData

【原创】android——SQLite的cmd命令的基本操作

步骤:enter为按键 1,开始—>运行—>输入cmd  (enter) 2,输入adb shell  (enter) 3, cd data/data/应用包名/databases  (enter) 4, ls (查看目录下的数据库)   (enter) 5,sqlite3  数据库名.db;   (enter) 6,SQL语句操作表,注意标点符号一定是在英文输入法下 7,示例: [原创]android--SQLite的cmd命令的基本操作,布布扣,bubuko.com

Android Sqlite基本命令

要查看数据库,首先必须要找到db文件,如果拷贝到电脑上,查看的方法比较多,在手机上,用命令查看比较直接和方便. 首先要找到数据库的位置,一般数据库时存放在程序的私有目录,所以要获取root权限. 确保开发工具已经连接上手机,打开命令行,输入adb shell 这时还没有获取root权限,输入su,手机会弹出提示,允许获取root权限 后缀变为"#",成功获取root权限,这时可以进入应用程序的私有目录, 输入cd data/data/程序包名/databases/,进入数据库的目录 下