Android端的Gradle打包
Unity2019的导出(构建为Gradle包)
如果Unity端更改了C#代码,需要重新导入assets 部分的代码.实际上,在代码逻辑层,在Unity项目中的Assets正常路径中的脚本文件(会编译到Assembly-CSharp.dll,Assembly-CSharp-firstpass.dll)详实参考网上编译顺序.
当前的操作遇到的情况就是,如果讲asset的所有文件覆盖,对应的dll没有更新到,解决方法是讲对应的两个dl覆盖进来,Unity那边的C#改动就同步过来了.(实际操作看当时实际情况)
Android Studio(以后文档简称它为AS)下,参看对应的文件位置:
Unity端的改动具体会影响到的Gradle项目位置大体看流程图:
热更对应看版本号
应用内安装aap和增量热更其实都是应用升级,手游项目一般会把安装app叫做强更.在代码热更使用ToLua的情况下,没有HotFix,那么C#版本的更新必须用到强更,那么项目中构建好"应用内安装app"的功能就非常必要
应用内下载安装重要条件
1.得到用户主动许可的权限
2.Android端 使用 FileProvider(必要且重要)
理论上,满足了以上的条件就能唤起应用的下载与安装.
清单配置里面的权限声明:
//android 8.0安装apk需要请求未知来源权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
//Android6.0权限适配之SD卡写入
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//Android6.0权限适配之进行访问sd卡
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
// 允许一个程序安装packages
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
以上是安卓系统主动请求用户的相关权限,在用户不主动接受的时候,可以无法进行后面的安装操作.
清单内的权限声明:
动态地申请权限,调用时机在Android启动的时候就开始赋权
另外注意安卓的SDK版本问题:(以下是居于FileProvider的讨论)
本地测试的时候,用的SDK是7以上的版本(Android 8.0)
Android 7.0的新特性规定,对于android 7.0应用(仅仅对于android 7.0版本的sdk而言,若是编译版本低于25仍然不会受到影响),android框架使用StrictMode Api禁止我们的应用对外部(跨越应用分享)公开file://,若使用file://格式共享文件则会报FileUriExposedException异常,android 7.0应用间的文件共享需要使用content://类型的URI分享,并且需要为其提供临时的文件访问权限
(Intent.FLAG_GRANT_READ_URI_PERMISSION和Intent.FLAG_GRANT_WRITE_URI_PERMISSION),对此,官方给我们的建议是使用FileProvider类进行分享。
(作者:_凌浩雨
链接:https://www.jianshu.com/p/f0b2cf0e0353
来源:简书)
对于FileProvider进行的数据读取共响,网上的方案很多,但是坑点在这里:
<!-- Caused by: java.lang.ClassNotFoundException:
Didn‘t find class "android.support.v4.content.FileProvider" -->
android:name="android.support.v4.content.FileProvider"
======================================================
<!-- Didn‘t find class "androidx.core.content.FileProvider" -->
android:name= "androidx.core.content.FileProvider"
也就是说,AS可能获取不到这个两个类,
解决方法在此:
dependecies{
//android.support.v4.content.FileProvider需要依赖的包
implementation ‘com.android.support:design:26.+‘
//androidx.core.content.FileProvider需要依赖的包
implementation "androidx.contentpager:contentpager:1.0.0"
}
当前项目用的是 implementation "androidx.contentpager:contentpager:1.0.0",使用的FileProvider是"androidx.core.content.FileProvider".
最后的坑点
最后系统已经能拉起来新包了,但是新包覆盖不成功,显示安装失败,就是包的签名不对应,所以注意包的签名,版本等问题
原文:https://www.cnblogs.com/Langzigui/p/13697331.html