推荐内容IMESSGAE相关

作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息
作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息
作者推荐内容 2.相册推 *** 点击即可查看作者要求内容信息
作者推荐内容 3.日历推 *** 点击即可查看作者要求内容信息
作者推荐内容 4.虚拟机安装简单 *** 点击即可查看作者要求内容信息
作者推荐内容 5.iMessage *** 点击即可查看作者要求内容信息

ASTC SceneKit新特性 SceneKit是苹果为了让游戏开发者更方便地开发3D游戏而推出来的,它支持iOS和MacOS X。同时,它还完美支持粒子系统,物理集成和SpriteKit。iOS9中改良了场景编辑器,同时对Metal的支持也更加完善了。场景编辑器功能总结如下: 1、支持更多的3D文件格式:DAE,OBJ,Alembic, STL和PLY文件格式。 2、新的原生文件格式,使用NSKeyedArchiver来存取 3、Shader修改器和环境光掩藏(Ambient Occlusoni) 4、天空盒(Skybox)和多少修改器 5、SCNTechnique支持 6、支持声音节点 7、支持Model I/O 除了这7点之外,另有诸如compute shader、relfective cub map等功能。新的SceneKit可以根据设备类型自动立室是否使用OpenGL或Metal作为渲染后端,同时它支持SpriteKit的场景切换,建造SceneKit场景切换结果更容易了。 7、SpriteKit新特性 1、资源分类(Asset catalog)支持,开发者可以更切确地节制不同设备使用的资源分辨率,最重要的是,玩家在下载游戏到设备里面时,只会下载与其设备分辨率匹配的资源。 2、按需加载资源,通过给不同的资源设备Tag,可以指定某些场景和关卡只加载特定Tag的资源。 3、XCode快速预览:支持在Playgound里面使用Swift编写一些测试代码,然后快速预览效果。不需要分外的编译,立马就可以看到API的使用效果,这对于测试一些API和考证一些设法非常有帮忙。 4、2D时间轴行动编辑器:这个应当算是SpriteKit的大杀器了,它是一个功能完善的2D动作编辑器,可以支持及时预览动作效果,并且同时支持2D和3D。 5、数据驱动:SKReferenceNode可以让可重用的游戏组件数据化,让玩家可以用更少的代码来完成游戏开发。 6、Metal渲染支持。 7、相机节点(SKCameraNode):更容易创建转动游戏。 四、App瘦身 这项功能可以让iOS设备在很多安置应用、更新应用以及运行应用等多种场景中仅下载需要的代码而不是所有的资源,这样iOS应用占用的空间就会削减很多,从而节省出更多的残剩存储空间。

App Thinning功能中实在有三个自力的机制: 1、App Slicing- 在节省应用所需资源中发挥着最重要的感化。很多应用需要在不同尺寸的设备上运行,针对这些不同的设备,它们内含不同的独立资源,而大部分是你的设备不需要的。有了App Slices,开发者就可以根据设备添加资源标签,当用户从iTunes下载应用时,它将仅仅下载以后设备需要的资源。 2、ODR -(on-demand resources按需应变资源)是iOS减少应用资源损耗的另外一种方法。比如多级游戏,用户需要的凡是都是他们当前的级数以及下一级。ODR意味着用户可以下载他们需要的几级游戏。跟着你的级数不竭增加,应用再下载其他级数,并将用户乐成过关的级数删掉。 3、Bitcode -使得开发者上传应用程序时没必要提交预编译的二进制文件,只需要上传中间代码即可。而用户下载时,App Slicing可以根据用户需要,来判断你是需要32位还是64位。也就是说,在用户下载应用之前,App Store在自动编译应用程序。这样,即便开发者没有给他们的代码添加标签,应用也能够实行App Slicing的部分功能,仅下载设备需要的32或64位代码。 五、支持从右至左的说话(RTL) iOS 9中支持从右至左的语言支持,可以很轻易地使一个用户界面进行翻转。包括: 1、现在所有的UIKit中的控件都支持对这种语言的表现与输入。只有在RTL上下文中即可实现翻转。 2、UIView定义了语法内容属性(semantic content attributes)来指定视图若何显示在一个RTL上下文中。 3、UIImage新增了方法imageFlippedForRightToLeftLayoutDirection,可以很方便的将图片翻转。 六、App传输加密(ATS) App Transit Security,简称ATS,也就是我们所说的HTTP进级至HTTPS传输。iOS 9与OS X 10.11以后版本已经默许使用ATS,而苹果也哀求我们尽快采纳ATS。ATS的益处是增强数据安全(客户端与服务器之间的数据传输),防备信息泄漏。关于HTTPS参阅TSL/SSL范例。如果我们的服务器端还来不及做相关升级,那么客户端可以临时回滚至不安全的收集请求方式(仍然使用HTTP),固然苹果不倡导持久这样做。详细的设置方法:在info.plist中添加: 05213741_I2bD.png @implementation JPTableViewController … - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *content = self.dataSource[[indexPath row]]; //可能会超越数组范畴致使crash JPViewController *ctrl = [[JPViewController alloc] initWithContent:content]; [self.navigationController pushViewController:ctrl]; } … @end 七、App扩大 iOS 9中提供几种新的应用扩展: 1、网络扩展

APP_PATH=“TARGETBUILDDIR/{TARGET_BUILD_DIR}/TARGETBUILDDIR/{WRAPPER_NAME}” # This script loops through the frameworks embedded in the application and # removes unused architectures. find "APPPATH"−name′∗.framework′−typed∣whileread−rFRAMEWORKdoFRAMEWORKEXECUTABLENAME=APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK do FRAMEWORK_EXECUTABLE_NAME=APPPATH"name.frameworktypedwhilereadrFRAMEWORKdoFRAMEWORKEXECUTABLENAME=(defaults read “FRAMEWORK/Info.plist"CFBundleExecutable)FRAMEWORKEXECUTABLEPATH="FRAMEWORK/Info.plist" CFBundleExecutable) FRAMEWORK_EXECUTABLE_PATH="FRAMEWORK/Info.plist"CFBundleExecutable)FRAMEWORKEXECUTABLEPATH="FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME” echo “Executable is $FRAMEWORK_EXECUTABLE_PATH” EXTRACTED_ARCHS=() for ARCH in $ARCHS do echo “Extracting $ARCH from FRAMEWORKEXECUTABLENAME"lipo−extract"FRAMEWORK_EXECUTABLE_NAME" lipo -extract "FRAMEWORKEXECUTABLENAME"lipoextract"ARCH” “FRAMEWORKEXECUTABLEPATH"−o"FRAMEWORK_EXECUTABLE_PATH" -o "FRAMEWORKEXECUTABLEPATH"o"FRAMEWORK_EXECUTABLE_PATH-ARCH"EXTRACTEDARCHS+=("ARCH" EXTRACTED_ARCHS+=("ARCH"EXTRACTEDARCHS+=("FRAMEWORK_EXECUTABLE_PATH-$ARCH”) done 对付纹理格局的一些底子知识可以或许在上一篇文章中开首的基础中看到,在此不做赘述。这里简略阐明一下 ASTC 这类格式。 1. 概述 ASTC(Adaptive Scalable Texture Compression)是一种基于块的有损纹理紧缩格式,完备细节在 2012 年被提出。这种压缩格式有多种压缩率可选,同时有着较高的压缩率和较好的压缩质量。 2. 压缩率 在上面的表中展现了从 ASTC 格式从 4x4 到 12x12 每一个像素所占的比特数(bpp),可以看到最大(也便是 4x4)的占用为每一个像素一个字节,那末一张 1024x1024 的贴图,利用 ASTC 4x4 压缩后,他的巨细就是 1MB,这个大小和 ETC2 RGBA 8bpp 格式的大小雷同。 3. 纹理质量 从成果来看,在相同的内存占用前提下,ASTC 相较其余传统压缩格式的质量更优;而在相同的质量前提下,占用内存更小。关于 ASTC 的压缩范例挑选和质量相干说明, 可以参考这里:https://developer.nvidia.com/astc-texture-compression-for-game-assets 4. 支撑机型 iOS 上,苹果从 A8 处置器起头支持 ASTC 格式(即从 iphone6,iPad mini 4 开始支持),而以前的 iPhone 5s 和 iPad mini 3 及以前的装备都不支持。 Android 上,将来的压缩格式正在从 ETC2 转向 ASTC。可是由于 android 机多样性,今朝的市场普及率我暂不可知。 根本使用 如今在 Unity 中要使用 ASTC 格式很是简单:选择纹理导入配置,选择 ASTC 格式,完成! 这就竣事了吗?明显事变并没有这么简单,上面提到过的硬件的限定使得咱们没法这么简单的选择,因为在不支持的硬件上使用 ASTC 格式,会被软解为 RGBA,从而数倍的增长其内存占用,让游戏刹时被体系杀掉。 针对这些硬件限制,我们基于名目自己的特色一样平常有如下的考量: 在 iOS 上若是项目是个大型游戏,可以抛却低端呆板的用户,那么就间接使用 ASTC; 在 android 上,如果可以获得正确的市场占有率,并肯定可以放弃这一部门市场的前提下,可以直接使用 ASTC; 现在立项的挪动端游戏,且未来会有开辟时长 2 年以上的,可以斟酌只使用 ASTC; 不然,如果你想考虑低端用户,那么仍是必要考虑 ASTC 和传统格式的兼容性问题,我们接下来就会讲到这套实现计划:按照硬件条件选择使用分歧的纹理格式。 根据硬件条件选择使用不同纹理格式 1. 基本思绪 起首,对于直接援用打入包内的方法是不适合本方案的。本方案基于经由过程 AssetBundle 加载资本的项目(包括静态加载和依靠加载)。 基本思路为:在打包时天生一份完整的 AssetBundle 包今后,再针对需要使用 ASTC 的纹理地点的 AssetBundle 包从新打一份 ASTC 版本的;在运转时根据硬件支持环境等信息来选择加载哪一份 AssetBundle 包(PVRTC/ASTC)。 如许在游戏运行进程中,如某个 prefab 引用了一个 sprite,可以通过硬件情况选择不同的 AssetBundle 包,加载不同QQ靓号发售包中相同的 Sprite,而后引用到不同压缩格式的纹理上,就到达了我们的目标。 2. 构建测试工程 基于上面的思路,我们来构建一个测试工程,测试工程需要包含以下内容: 打 AssetBundle 包流程 生成 BundleMap,记实 ASTC 信息,供运行时使用 生成 AtlasBundleMap,记录需要重新打 ASTC 版本 AssetBundle 包的信息,供打包时使用 运行时资源加载,根据硬件条件来选择不同的 AssetBundle 包 3. 实现细节 首先是打 AssetBundle 包流程,这块不会细致说,因为每个项目的实现都大概不同。在这里,我们的思路是:增加需要动态加载的 AB 包规矩,末了计较出它们依赖的资源,按规则打成其他依赖 AB 包。下面的代码表示了这一过程。 var builder = new AssetBundleBuilder(); builder.AddSceneBundle(“Assets/Scenes/Test.unity”, “scenes_”); builder.AddSceneBundle(“Assets/Scenes/Loading.unity”, “scenes_”);

builder.AddDirBundle(“Assets/Textures/Dynamic”, “”, “textures_”); builder.UpdateSharedAssets(); builder.BuildAssetBundles(abPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget); 此中重点在 UpdateSharedAssets() 法子中,其中不但计算了全部的依赖干系,同时记录了 AtlasBundleMap 和 BundleMap。 下图为 BundleMap 的格式,最重要的几个字段是 BundleName(记录 AB 包名),AstcVariant(是不是有其 ASTC 版本),AstcVariantBundleName(ASTC 版本的 AB 包名)。这个文件会打入终极的 AB 包内,在运行时加载资源时根据 AstcVariant 和 AstcVariantBundleName 来果断并加载对应的 ASTC 版本的包。 下图为 AtlasBundleMap 的格式。这个文件记录了需要再打一份 ASTC 版本 AB 包的包名列表,在后续的打包过程中会用到。 颠末上面的过程,完整的 AB 包曾经都打进去了,下面需要重新打一批 ASTC 版本的 AB 包。首先重新打一次图集: EditorSettings.spritePackerMode = SpritePackerMode.BuildTimeOnlyacker.SelectedPolicy = typeof(CustomSpritePackerPolicy).Name;CustomSpritePackerPolicy.MakeAstc = true;Packer.RebuildAtlasCacheIfNeeded(target, true, Packer.Execution.ForceRegroup); 上面需要细致的是:两次打图集需要有一个不同的标记:MakeAstc,第一次为 false,第二次为 true,在自界说的图集打包规则中才可以判断出两次需要打的是不同的图集。自定义图集规则中的实现为: if (MakeAstc){ if (IsTransparentCompressed(settings.format)) { settings.format = Util.ASTC_RGBA_FORMAT; } else if (IsOpaqueCompressed(settings.format)) { settings.format = Util.ASTC_RGB_FORMAT; } } 更多的关于自定义图集规则可以参考民间文档:https://docs.unity3d.com/Manual/SpritePacker.html 以后使用一样的 BuildAssetBundleOptions,根据 AtlasBundleMap 中信息对响应资源再打一次 AB 包便可,打完后更名拷贝到之前的文件夹中,现在的 AB 包目次就像是这样: ModelI/O Model I/O是用场理3D资源和数据的框架,我们可以通过Model I/O快捷地加载和导出3D资源文件。别的,它集成在Xcode内里而且和可以非常轻易地与GameKit API共同。它的重要功效特征以下: 1、支持多种3D文件格式的导入导出。 2、可以对资源举行点窜和Bake。 3、支持3D模子三维像素化(Voxels)。 4、集成Playground, Swift和Finder,并且能够在Finder的Quick look里面预览资源。 5、支持基于物理的材质和光照。 6、连系MetalKit,、GLKit大概SceneKit供给的API来装载资源数据到GPU的缓冲区进行衬着。 3、MetalKit MetalKit.framework提供了一组东西类和函数,目的在于节流开发Metal操纵的时候,让Metal开发变得加倍简单。 MetalKit对于一些常见的应用场景提供了高效的实现,开发者可以用更少地代码来开发应用,并且开发出来的应用性能和稳定性会更高。 MetalKit提供了一个MTKView类,它同一处理了渲染一个Metal场景所需要的设置代码,另外,它提供了一个纹理加载器,它可以从一个图片文件中建立一个Metal纹理。最后,MetalKit美满支持Model I/O,让3D模型的处理更加简单。

作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息
作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息
作者推荐内容 2.相册推 *** 点击即可查看作者要求内容信息
作者推荐内容 3.日历推 *** 点击即可查看作者要求内容信息
作者推荐内容 4.虚拟机安装简单 *** 点击即可查看作者要求内容信息
作者推荐内容 5.iMessage *** 点击即可查看作者要求内容信息

4、MetalPerformance Shaders Metal performance shader是一个为GPU提供数据并行算法的一个框架,目前只支持A8处理器。 它定义了一些雷同操纵CPU气概的API,这样可以让GPU编程变得更加简单。它提供了不少内置的并行算法,好比兰索斯重新取样(Lanczos resampling),卷积函数(比如高斯滤镜等),直方图等。 5、Metal新特性 1、新的内存模型:它一共支持3种内存模型,别离是共享内存模型,公有内存模型和托管内存模型。 2、新的纹理压缩格式(ASTC) 3、设备GPU类型判断:主动根据设备的GPU类型来判断支持的特性调集。 4、MetalKit框架:让Metal应用开发更加简单便利。 5、Metal performance shader框架:提供了一系列数据并行算法。 6、Metal调试工具:更方面地调试Metal图形应用。 7、Metal应用程序瘦身:这一点和上面先容的SpriteKit瘦身道理是同样的。 echo “Merging extracted architectures: ARCHS"lipo−o"{ARCHS}" lipo -o "ARCHS"lipoo"FRAMEWORK_EXECUTABLE_PATH-merged” -create “EXTRACTEDARCHS[@]"rm"{EXTRACTED_ARCHS[@]}" rm "EXTRACTEDARCHS[@]"rm"{EXTRACTED_ARCHS[@]}” echo “Replacing original executable with thinned version” rm “FRAMEWORKEXECUTABLEPATH"mv"FRAMEWORK_EXECUTABLE_PATH" mv "FRAMEWORKEXECUTABLEPATH"mv"FRAMEWORK_EXECUTABLE_PATH-merged” “$FRAMEWORK_EXECUTABLE_PATH” done 1、使用Packet Tunnel Provider extension point来实现自定义VPN通道协定客户端。 id data = @{ @“greetingFromObjC”: @“Hi there, JS!” }; [_bridge callHandler:@“testJavascriptHandler” data:data responseCallback:^(id response) { NSLog(@“testJavascriptHandler responded: %@”, response); }]; 注意这里的testJavascriptHandler也是个方法标示。 (3)oc给js传值(通过response担当返回值) 2、使用App Proxy Provider extension point来实现一个通明网络代办署理协议客户端。 3、使用Filter Data Provider和Filter Control Provider extension points来实现动态的设备端网络内容过滤。 注:每个网络扩展,需要苹果公司允许。 2、Safari扩展 //webview每次加载之前都会挪用这个方法,利用该代理方法截取JS的href来调用原生的方法 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:

(UIWebViewNavigationType)navigationType 但是此次的交互要求是进行双向通信,即JS调用原生App的方法之后,原生App要讲相关参数信息返回给H5页面,H5页面接受到参数信息后做其他处理。 例:H5页面的公布信息按钮,在点击按钮后要在原生端判断用户是否登录,若没有登录则弹出原生登录页面,登录成功后将用户信息返回给H5页面,继承发布流程。 重点来了! 在这里保举一个比力好的第三方库即:WebViewJavascriptBridge 地点:https://github.com/marcuswestin/WebViewJavascriptBridge 通过使用该库可以轻松实现JS与原生交互。 //初始化WebViewJavascriptBridge方法 _bridge= [WebViewJavascriptBridge bridgeForWebView:self.BookWebView webViewDelegate:self handler:^(id data,WVJBResponseCallback responseCallback) { }]; //原生与JS商定接口名为“testObjcCallback”,data是JS通报过去的信息,responseCallback来将信息传递给JS [bridge registerHandler:@“testObjcCallback” handler:^(id data,WVJBResponseCallback responseCallback) { responseCallback(“postInfomationToJS”) }]; 其中 astc 开头的都是对应的 AB 包的 ASTC 版本。 接下来我们来到运行时。首先是判断硬件是否支持 ASTC 格式: public static bool DeviceSupportAstc(){ var support = true; support = support && SystemInfo.SupportsTextureFormat(ASTC_RGB_FORMAT); support = support && SystemInfo.SupportsTextureFormat(ASTC_RGBA_FORMAT); return support; }

【苹果家庭群发推】Metal performance shader软件安装框架相关推荐

  1. 【苹果家庭群发推送】软件安装public static

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件安装 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容安装 *** 点击即可查看作者要求内容信息 作者推荐内容 ...

  2. 【苹果家庭群发推送】软件安装Apple推送是一种基于IMESSAGE平台的新信息推送功效的营销软件

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  3. 【苹果家庭群发推送】软件安装最新的Appletweetios.macosimessage是用于发送Apple文本消息

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  4. 【苹果家庭群发推送】软件安装网站下线时代更新了证书生成机制

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  5. 【苹果家庭群发推】创作AppleScript脚本来控制MacOS附有的iMessage客户端停止考据,近似于组iMessage

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  6. 【家庭推送imessage】软件安装虚拟主机承租 totheBuddy delay

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件安装 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容安装 *** 点击即可查看作者要求内容信息 作者推荐内容 ...

  7. 【苹果家庭推送iMessage】软件安装应用程序访问HealthKit HomeKit

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  8. 【苹果推送】imessage软件安装iPhoneDeveloper家庭组建

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  9. 【iMessage苹果家庭推源码】软件安装Stomp协定的配置使用IMAP协议接收邮件

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  10. 【苹果家庭推送iMessage】软件安装UITableViewController

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

最新文章

  1. 基于连通域字符分割的流程_基于改进连通域算法的车牌字符分割方法
  2. Python学习笔记:Day 16 编写移动App
  3. Py函数直接传入root是啥意思_Python内部函数——用处何在?
  4. Android之解决PC端上传http表单格式文件手机解析文件名乱码问题和PC浏览器下载文件的文件名显示乱码问题
  5. Python字典按值排序、包含字典的列表按字典值排序的方法
  6. npm的安装和更新---npm工作笔记002
  7. RISC-V_GD32VF103-开发环境搭建和使用
  8. 微博视频php解析,微博视频的地址解析下载
  9. 机器学习必学十大算法
  10. 关于机器人创业:学术界vs工业界及中国机器人企业的机会
  11. bootstrap完整左侧导航栏代码及结果样式
  12. GIS地理信息系统相关整理
  13. 基于PHP课程网站设计开题报告,在线课程网站设计开题报告
  14. Power BI DAX 编写利器 —— DaxStudio 的简单用法
  15. dreamweaver网页制作,主题呼吁人们保护动物
  16. 日常pytho3练习脚本之--两个逗比聊天机器人
  17. GridView控件 Image控件 与图片的二进制数据库存储和显示
  18. 了解一下ES module 和 Commonjs
  19. linux 压缩减少大小,linux – 为什么gnu parallel chunking会改善gzip的压缩大小?
  20. 在网络隔离下实现文件传输交换,你的方式真的安全吗?

热门文章

  1. ​从ASML年报看半导体产业的未来
  2. 怎么删除日历每日重复提醒事项
  3. 网络就好似一个个树洞
  4. python中inf_认识python中的inf和nan
  5. java 汉语词频_java中文词频统计
  6. Poco C++类库使用说明
  7. android全屏状态栏是黑色,解决DialogFragment全屏时状态栏变黑
  8. 【Autoware】之ndt_mapping理论公式及代码对比
  9. HDRP shader 获取阴影(Custom Pass)
  10. liunx 安装docker