[{"data":1,"prerenderedAt":1696},["ShallowReactive",2],{"page-Package-1":3,"page-count-Package":117},[4,1569],{"id":5,"title":6,"body":7,"date":1546,"description":13,"extension":1547,"meta":1548,"navigation":120,"path":1562,"seo":1563,"stem":1564,"tags":1565,"__hash__":1568},"blogs\u002F_legacy\u002F2015\u002F2015-08-01-ue4-package-logs-android.md","UE4游戏Package记录（Android）",{"type":8,"value":9,"toc":1540},"minimark",[10,14,17,21,32,35,45,53,56,59,62,65,68,71,74,77,80,83,1451,1454,1460,1463,1466,1469,1477,1480,1486,1489,1492,1503,1506,1509,1512,1515,1523,1530,1533,1536],[11,12,13],"p",{},"Android的打包比Windows下要稍微麻烦一些，因为使用的编译器不同导致的问题也就多了起来。",[11,15,16],{},"当前使用的UE4版本为4.10.1。",[18,19,20],"h2",{"id":20},"基本步骤",[11,22,23,24,31],{},"UE4打包Android的教程官方是有提供的，可以看",[25,26,30],"a",{"href":27,"rel":28},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FINT\u002FPlatforms\u002FAndroid\u002FGettingStarted\u002F",[29],"nofollow","这里","。",[11,33,34],{},"下面只是简单的做一下总结的感觉，首先需要进行的是相关环境的安装。android sdk、ndk以及很多其他的东西，直接使用引擎自带的安装器就可以一次性搞定了。安装器在引擎如下的目录中可以找到",[36,37,38],"blockquote",{},[11,39,40,44],{},[41,42,43],"span",{},"ENGINE INSTALL LOCATION","\\Engine\\Extras\\Android\\CodeWorksforAndroid-1R6u1-windows.exe",[11,46,47,48,52],{},"开发必备环境的设定可以看[",[25,49,30],{"href":50,"rel":51},"https:\u002F\u002Fdocs.unrealengine.com\u002Fen-us\u002FPlatforms\u002FAndroid\u002FReference",[29],"]。",[11,54,55],{},"根据网络情况的不同，安装时间可能会比较长。",[11,57,58],{},"安装好之后其实就可以进行Android打包了，如果之前进行过Windows打包的话，基本不需要额外的设置。",[18,60,61],{"id":61},"插件问题",[11,63,64],{},"Android打包过程中很容易遇到的问题是插件上的，例如，如果在项目中有使用FMod的话，就需要进行一些额外的工作。",[11,66,67],{},"首先我们需要的是排查工具，在Android的SDK中有提供可以用于错误排查的工具。路径位于sdk的tools目录中，使用monitor.bat即可。",[11,69,70],{},"为了使用方便，在LogCat中添加新的过滤器就可以方便的对UE4的输出记录进行排查了。",[11,72,73],{},"如果在项目中有使用FMod的话，游戏在Android上是无法直接打开的，查看输出记录可以看到。",[11,75,76],{},"FMod的库文件没有被正确的找到，其实这是由于没有正确的按照FMod官方的配置说明进行配置导致的。在FMod的文档中其实是有说明的，不过没有到打包这一步的时候也并不需要进行配置。",[11,78,79],{},"当前FMod的Android打包需要对UE4的打包设置进行修改才行，首先，我们需要去GitHub上下载源码版的引擎。",[11,81,82],{},"并对UEDeployAndroid.cs进行修改，在CopyPluginLibs函数的末尾，添加如下的代码：",[84,85,90],"pre",{"className":86,"code":87,"language":88,"meta":89,"style":89},"language-java shiki shiki-themes github-light-high-contrast github-dark monokai","Console.WriteLine(\"Plugin Deployment\");\n\nList\u003Cstring> PluginLibraryReferences = new List\u003Cstring>();\n\nforeach (PluginInfo Plugin in Plugins.ReadAvailablePlugins(UnrealBuildTool.GetUProjectFile()))\n\n{\n\n    string AndroidDirectory = Path.Combine(Plugin.Directory, \"Binaries\u002FAndroid\");\n\n    string DeployFile = Path.Combine(AndroidDirectory, \"deploy.txt\");\n\n    if (File.Exists(DeployFile))\n\n    {\n\n        Console.WriteLine(\"Using Plugin Deployment file '{0}'\", DeployFile);\n\n        string DestLibraryDirectory = Path.Combine(UE4BuildPath, \"libs\u002Farmeabi-v7a\");\n\n        string DestJarDirectory = Path.Combine(UE4BuildPath, \"libs\");\n\n        foreach (string Name in File.ReadAllLines(DeployFile))\n\n        {\n\n            Console.WriteLine(\"Have file entry '{0}'\", Name);\n\n            string PluginFileExt = Path.GetExtension(Name);\n\n            if (PluginFileExt == \".so\")\n\n            {\n\n                string SourceFile = Path.Combine(AndroidDirectory, Name);\n\n                string DestFile = Path.Combine(DestLibraryDirectory, Name);\n\n                Console.WriteLine(\"Copying plugin .so file '{0}' to '{1}'\", SourceFile, DestFile);\n\n                if (File.Exists(DestFile))\n\n                {\n\n                    File.Delete(DestFile);\n\n                }\n\n                File.Copy(SourceFile, DestFile);\n\n                \u002F\u002F Also remember it for GameActivity\n\n                PluginLibraryReferences.Add(Name);\n\n            }\n\n            else if (PluginFileExt == \".jar\")\n\n            {\n\n                string SourceFile = Path.Combine(AndroidDirectory, Name);\n\n                string DestFile = Path.Combine(DestJarDirectory, Name);\n\n                Console.WriteLine(\"Copying plugin .jar file '{0}' to '{1}'\", SourceFile, DestFile);\n\n                if (File.Exists(DestFile))\n\n                {\n\n                    File.Delete(DestFile);\n\n                }\n\n                File.Copy(SourceFile, DestFile);\n\n            }\n\n        }\n\n    }\n\n}\n\n\u002F\u002F Enter all .so references into GameActivity java file\n\nif (PluginLibraryReferences.Count != 0)\n\n{\n\n    Console.WriteLine(\"Adding Plugin Deployment library references\");\n\n    String GameActivityFileName = Path.Combine(UE4BuildPath, \"src\u002Fcom\u002Fepicgames\u002Fue4\u002FGameActivity.java\");\n\n    List\u003Cstring> ActivityContents = new List\u003Cstring>(File.ReadAllLines(GameActivityFileName));\n\n    int LoadLibraryIndex = -1;\n\n    for (int i = 1; i \u003C ActivityContents.Count; ++i)\n\n    {\n\n        if (ActivityContents\u003Ci>.Contains(\"System.loadLibrary\"))\n\n        {\n\n            LoadLibraryIndex = i;\n\n            break;\n\n        }\n\n    }\n\n    if (LoadLibraryIndex != -1)\n\n    {\n\n        \u002F\u002F Insert in reverse order\n\n        PluginLibraryReferences.Reverse();\n\n        foreach (string Reference in PluginLibraryReferences)\n\n        {\n\n            Console.WriteLine(\"Adding library reference {0} at line {1}\", Reference, LoadLibraryIndex);\n\n            string ShortName = Path.GetFileNameWithoutExtension(Reference);\n\n            if (ShortName.StartsWith(\"lib\")) \u002F\u002F Without the lib prefix\n\n            {\n\n                ShortName = ShortName.Substring(3);\n\n            }\n\n            ActivityContents.Insert(LoadLibraryIndex, String.Format(\"\\t\\tSystem.loadLibrary(\\\"{0}\\\");\", ShortName));\n\n        }\n\n    }\n\n    File.WriteAllLines(GameActivityFileName, ActivityContents.ToArray());\n\n}\n\n\u002F\u002F PLUGIN DEPLOYMENT END\n","java","",[91,92,93,115,122,160,165,195,200,206,211,234,239,259,264,279,284,290,295,311,316,336,341,360,365,385,390,396,401,417,422,438,443,461,466,472,477,492,497,512,517,533,538,551,556,562,567,579,584,590,595,607,612,619,624,635,640,646,651,669,674,679,684,697,702,716,721,735,740,751,756,761,766,775,780,785,790,799,804,809,814,820,825,831,836,842,847,853,858,876,881,886,891,906,911,933,938,971,976,996,1001,1034,1039,1044,1049,1081,1086,1091,1096,1107,1112,1120,1125,1130,1135,1140,1145,1161,1166,1171,1176,1182,1187,1199,1204,1217,1222,1227,1232,1247,1252,1268,1273,1295,1300,1305,1310,1331,1336,1341,1346,1387,1392,1397,1402,1407,1412,1430,1435,1440,1445],"code",{"__ignoreMap":89},[41,94,97,101,105,108,112],{"class":95,"line":96},"line",1,[41,98,100],{"class":99},"s0idv","Console.",[41,102,104],{"class":103},"scAT4","WriteLine",[41,106,107],{"class":99},"(",[41,109,111],{"class":110},"sZnmU","\"Plugin Deployment\"",[41,113,114],{"class":99},");\n",[41,116,118],{"class":95,"line":117},2,[41,119,121],{"emptyLinePlaceholder":120},true,"\n",[41,123,125,129,133,137,140,143,147,150,153,155,157],{"class":95,"line":124},3,[41,126,128],{"class":127},"ss1GH","List",[41,130,132],{"class":131},"suI3T","\u003C",[41,134,136],{"class":135},"sGZGq","string",[41,138,139],{"class":131},"> ",[41,141,142],{"class":99},"PluginLibraryReferences",[41,144,146],{"class":145},"sLXdl"," =",[41,148,149],{"class":145}," new",[41,151,152],{"class":127}," List",[41,154,132],{"class":99},[41,156,136],{"class":135},[41,158,159],{"class":99},">();\n",[41,161,163],{"class":95,"line":162},4,[41,164,121],{"emptyLinePlaceholder":120},[41,166,168,171,174,177,180,183,186,189,192],{"class":95,"line":167},5,[41,169,170],{"class":103},"foreach",[41,172,173],{"class":99}," (",[41,175,176],{"class":127},"PluginInfo",[41,178,179],{"class":127}," Plugin",[41,181,182],{"class":99}," in Plugins.",[41,184,185],{"class":103},"ReadAvailablePlugins",[41,187,188],{"class":99},"(UnrealBuildTool.",[41,190,191],{"class":103},"GetUProjectFile",[41,193,194],{"class":99},"()))\n",[41,196,198],{"class":95,"line":197},6,[41,199,121],{"emptyLinePlaceholder":120},[41,201,203],{"class":95,"line":202},7,[41,204,205],{"class":99},"{\n",[41,207,209],{"class":95,"line":208},8,[41,210,121],{"emptyLinePlaceholder":120},[41,212,214,217,220,223,226,229,232],{"class":95,"line":213},9,[41,215,216],{"class":99},"    string AndroidDirectory ",[41,218,219],{"class":145},"=",[41,221,222],{"class":99}," Path.",[41,224,225],{"class":103},"Combine",[41,227,228],{"class":99},"(Plugin.Directory, ",[41,230,231],{"class":110},"\"Binaries\u002FAndroid\"",[41,233,114],{"class":99},[41,235,237],{"class":95,"line":236},10,[41,238,121],{"emptyLinePlaceholder":120},[41,240,242,245,247,249,251,254,257],{"class":95,"line":241},11,[41,243,244],{"class":99},"    string DeployFile ",[41,246,219],{"class":145},[41,248,222],{"class":99},[41,250,225],{"class":103},[41,252,253],{"class":99},"(AndroidDirectory, ",[41,255,256],{"class":110},"\"deploy.txt\"",[41,258,114],{"class":99},[41,260,262],{"class":95,"line":261},12,[41,263,121],{"emptyLinePlaceholder":120},[41,265,267,270,273,276],{"class":95,"line":266},13,[41,268,269],{"class":145},"    if",[41,271,272],{"class":99}," (File.",[41,274,275],{"class":103},"Exists",[41,277,278],{"class":99},"(DeployFile))\n",[41,280,282],{"class":95,"line":281},14,[41,283,121],{"emptyLinePlaceholder":120},[41,285,287],{"class":95,"line":286},15,[41,288,289],{"class":99},"    {\n",[41,291,293],{"class":95,"line":292},16,[41,294,121],{"emptyLinePlaceholder":120},[41,296,298,301,303,305,308],{"class":95,"line":297},17,[41,299,300],{"class":99},"        Console.",[41,302,104],{"class":103},[41,304,107],{"class":99},[41,306,307],{"class":110},"\"Using Plugin Deployment file '{0}'\"",[41,309,310],{"class":99},", DeployFile);\n",[41,312,314],{"class":95,"line":313},18,[41,315,121],{"emptyLinePlaceholder":120},[41,317,319,322,324,326,328,331,334],{"class":95,"line":318},19,[41,320,321],{"class":99},"        string DestLibraryDirectory ",[41,323,219],{"class":145},[41,325,222],{"class":99},[41,327,225],{"class":103},[41,329,330],{"class":99},"(UE4BuildPath, ",[41,332,333],{"class":110},"\"libs\u002Farmeabi-v7a\"",[41,335,114],{"class":99},[41,337,339],{"class":95,"line":338},20,[41,340,121],{"emptyLinePlaceholder":120},[41,342,344,347,349,351,353,355,358],{"class":95,"line":343},21,[41,345,346],{"class":99},"        string DestJarDirectory ",[41,348,219],{"class":145},[41,350,222],{"class":99},[41,352,225],{"class":103},[41,354,330],{"class":99},[41,356,357],{"class":110},"\"libs\"",[41,359,114],{"class":99},[41,361,363],{"class":95,"line":362},22,[41,364,121],{"emptyLinePlaceholder":120},[41,366,368,371,374,377,380,383],{"class":95,"line":367},23,[41,369,370],{"class":103},"        foreach",[41,372,373],{"class":99}," (string ",[41,375,376],{"class":127},"Name",[41,378,379],{"class":99}," in File.",[41,381,382],{"class":103},"ReadAllLines",[41,384,278],{"class":99},[41,386,388],{"class":95,"line":387},24,[41,389,121],{"emptyLinePlaceholder":120},[41,391,393],{"class":95,"line":392},25,[41,394,395],{"class":99},"        {\n",[41,397,399],{"class":95,"line":398},26,[41,400,121],{"emptyLinePlaceholder":120},[41,402,404,407,409,411,414],{"class":95,"line":403},27,[41,405,406],{"class":99},"            Console.",[41,408,104],{"class":103},[41,410,107],{"class":99},[41,412,413],{"class":110},"\"Have file entry '{0}'\"",[41,415,416],{"class":99},", Name);\n",[41,418,420],{"class":95,"line":419},28,[41,421,121],{"emptyLinePlaceholder":120},[41,423,425,428,430,432,435],{"class":95,"line":424},29,[41,426,427],{"class":99},"            string PluginFileExt ",[41,429,219],{"class":145},[41,431,222],{"class":99},[41,433,434],{"class":103},"GetExtension",[41,436,437],{"class":99},"(Name);\n",[41,439,441],{"class":95,"line":440},30,[41,442,121],{"emptyLinePlaceholder":120},[41,444,446,449,452,455,458],{"class":95,"line":445},31,[41,447,448],{"class":145},"            if",[41,450,451],{"class":99}," (PluginFileExt ",[41,453,454],{"class":145},"==",[41,456,457],{"class":110}," \".so\"",[41,459,460],{"class":99},")\n",[41,462,464],{"class":95,"line":463},32,[41,465,121],{"emptyLinePlaceholder":120},[41,467,469],{"class":95,"line":468},33,[41,470,471],{"class":99},"            {\n",[41,473,475],{"class":95,"line":474},34,[41,476,121],{"emptyLinePlaceholder":120},[41,478,480,483,485,487,489],{"class":95,"line":479},35,[41,481,482],{"class":99},"                string SourceFile ",[41,484,219],{"class":145},[41,486,222],{"class":99},[41,488,225],{"class":103},[41,490,491],{"class":99},"(AndroidDirectory, Name);\n",[41,493,495],{"class":95,"line":494},36,[41,496,121],{"emptyLinePlaceholder":120},[41,498,500,503,505,507,509],{"class":95,"line":499},37,[41,501,502],{"class":99},"                string DestFile ",[41,504,219],{"class":145},[41,506,222],{"class":99},[41,508,225],{"class":103},[41,510,511],{"class":99},"(DestLibraryDirectory, Name);\n",[41,513,515],{"class":95,"line":514},38,[41,516,121],{"emptyLinePlaceholder":120},[41,518,520,523,525,527,530],{"class":95,"line":519},39,[41,521,522],{"class":99},"                Console.",[41,524,104],{"class":103},[41,526,107],{"class":99},[41,528,529],{"class":110},"\"Copying plugin .so file '{0}' to '{1}'\"",[41,531,532],{"class":99},", SourceFile, DestFile);\n",[41,534,536],{"class":95,"line":535},40,[41,537,121],{"emptyLinePlaceholder":120},[41,539,541,544,546,548],{"class":95,"line":540},41,[41,542,543],{"class":145},"                if",[41,545,272],{"class":99},[41,547,275],{"class":103},[41,549,550],{"class":99},"(DestFile))\n",[41,552,554],{"class":95,"line":553},42,[41,555,121],{"emptyLinePlaceholder":120},[41,557,559],{"class":95,"line":558},43,[41,560,561],{"class":99},"                {\n",[41,563,565],{"class":95,"line":564},44,[41,566,121],{"emptyLinePlaceholder":120},[41,568,570,573,576],{"class":95,"line":569},45,[41,571,572],{"class":99},"                    File.",[41,574,575],{"class":103},"Delete",[41,577,578],{"class":99},"(DestFile);\n",[41,580,582],{"class":95,"line":581},46,[41,583,121],{"emptyLinePlaceholder":120},[41,585,587],{"class":95,"line":586},47,[41,588,589],{"class":99},"                }\n",[41,591,593],{"class":95,"line":592},48,[41,594,121],{"emptyLinePlaceholder":120},[41,596,598,601,604],{"class":95,"line":597},49,[41,599,600],{"class":99},"                File.",[41,602,603],{"class":103},"Copy",[41,605,606],{"class":99},"(SourceFile, DestFile);\n",[41,608,610],{"class":95,"line":609},50,[41,611,121],{"emptyLinePlaceholder":120},[41,613,615],{"class":95,"line":614},51,[41,616,618],{"class":617},"sZdD5","                \u002F\u002F Also remember it for GameActivity\n",[41,620,622],{"class":95,"line":621},52,[41,623,121],{"emptyLinePlaceholder":120},[41,625,627,630,633],{"class":95,"line":626},53,[41,628,629],{"class":99},"                PluginLibraryReferences.",[41,631,632],{"class":103},"Add",[41,634,437],{"class":99},[41,636,638],{"class":95,"line":637},54,[41,639,121],{"emptyLinePlaceholder":120},[41,641,643],{"class":95,"line":642},55,[41,644,645],{"class":99},"            }\n",[41,647,649],{"class":95,"line":648},56,[41,650,121],{"emptyLinePlaceholder":120},[41,652,654,657,660,662,664,667],{"class":95,"line":653},57,[41,655,656],{"class":145},"            else",[41,658,659],{"class":145}," if",[41,661,451],{"class":99},[41,663,454],{"class":145},[41,665,666],{"class":110}," \".jar\"",[41,668,460],{"class":99},[41,670,672],{"class":95,"line":671},58,[41,673,121],{"emptyLinePlaceholder":120},[41,675,677],{"class":95,"line":676},59,[41,678,471],{"class":99},[41,680,682],{"class":95,"line":681},60,[41,683,121],{"emptyLinePlaceholder":120},[41,685,687,689,691,693,695],{"class":95,"line":686},61,[41,688,482],{"class":99},[41,690,219],{"class":145},[41,692,222],{"class":99},[41,694,225],{"class":103},[41,696,491],{"class":99},[41,698,700],{"class":95,"line":699},62,[41,701,121],{"emptyLinePlaceholder":120},[41,703,705,707,709,711,713],{"class":95,"line":704},63,[41,706,502],{"class":99},[41,708,219],{"class":145},[41,710,222],{"class":99},[41,712,225],{"class":103},[41,714,715],{"class":99},"(DestJarDirectory, Name);\n",[41,717,719],{"class":95,"line":718},64,[41,720,121],{"emptyLinePlaceholder":120},[41,722,724,726,728,730,733],{"class":95,"line":723},65,[41,725,522],{"class":99},[41,727,104],{"class":103},[41,729,107],{"class":99},[41,731,732],{"class":110},"\"Copying plugin .jar file '{0}' to '{1}'\"",[41,734,532],{"class":99},[41,736,738],{"class":95,"line":737},66,[41,739,121],{"emptyLinePlaceholder":120},[41,741,743,745,747,749],{"class":95,"line":742},67,[41,744,543],{"class":145},[41,746,272],{"class":99},[41,748,275],{"class":103},[41,750,550],{"class":99},[41,752,754],{"class":95,"line":753},68,[41,755,121],{"emptyLinePlaceholder":120},[41,757,759],{"class":95,"line":758},69,[41,760,561],{"class":99},[41,762,764],{"class":95,"line":763},70,[41,765,121],{"emptyLinePlaceholder":120},[41,767,769,771,773],{"class":95,"line":768},71,[41,770,572],{"class":99},[41,772,575],{"class":103},[41,774,578],{"class":99},[41,776,778],{"class":95,"line":777},72,[41,779,121],{"emptyLinePlaceholder":120},[41,781,783],{"class":95,"line":782},73,[41,784,589],{"class":99},[41,786,788],{"class":95,"line":787},74,[41,789,121],{"emptyLinePlaceholder":120},[41,791,793,795,797],{"class":95,"line":792},75,[41,794,600],{"class":99},[41,796,603],{"class":103},[41,798,606],{"class":99},[41,800,802],{"class":95,"line":801},76,[41,803,121],{"emptyLinePlaceholder":120},[41,805,807],{"class":95,"line":806},77,[41,808,645],{"class":99},[41,810,812],{"class":95,"line":811},78,[41,813,121],{"emptyLinePlaceholder":120},[41,815,817],{"class":95,"line":816},79,[41,818,819],{"class":99},"        }\n",[41,821,823],{"class":95,"line":822},80,[41,824,121],{"emptyLinePlaceholder":120},[41,826,828],{"class":95,"line":827},81,[41,829,830],{"class":99},"    }\n",[41,832,834],{"class":95,"line":833},82,[41,835,121],{"emptyLinePlaceholder":120},[41,837,839],{"class":95,"line":838},83,[41,840,841],{"class":99},"}\n",[41,843,845],{"class":95,"line":844},84,[41,846,121],{"emptyLinePlaceholder":120},[41,848,850],{"class":95,"line":849},85,[41,851,852],{"class":617},"\u002F\u002F Enter all .so references into GameActivity java file\n",[41,854,856],{"class":95,"line":855},86,[41,857,121],{"emptyLinePlaceholder":120},[41,859,861,864,867,870,874],{"class":95,"line":860},87,[41,862,863],{"class":145},"if",[41,865,866],{"class":99}," (PluginLibraryReferences.Count ",[41,868,869],{"class":145},"!=",[41,871,873],{"class":872},"stP0Q"," 0",[41,875,460],{"class":99},[41,877,879],{"class":95,"line":878},88,[41,880,121],{"emptyLinePlaceholder":120},[41,882,884],{"class":95,"line":883},89,[41,885,205],{"class":99},[41,887,889],{"class":95,"line":888},90,[41,890,121],{"emptyLinePlaceholder":120},[41,892,894,897,899,901,904],{"class":95,"line":893},91,[41,895,896],{"class":99},"    Console.",[41,898,104],{"class":103},[41,900,107],{"class":99},[41,902,903],{"class":110},"\"Adding Plugin Deployment library references\"",[41,905,114],{"class":99},[41,907,909],{"class":95,"line":908},92,[41,910,121],{"emptyLinePlaceholder":120},[41,912,914,917,920,922,924,926,928,931],{"class":95,"line":913},93,[41,915,916],{"class":127},"    String",[41,918,919],{"class":99}," GameActivityFileName",[41,921,146],{"class":145},[41,923,222],{"class":99},[41,925,225],{"class":103},[41,927,330],{"class":99},[41,929,930],{"class":110},"\"src\u002Fcom\u002Fepicgames\u002Fue4\u002FGameActivity.java\"",[41,932,114],{"class":99},[41,934,936],{"class":95,"line":935},94,[41,937,121],{"emptyLinePlaceholder":120},[41,939,941,944,946,948,950,953,955,957,959,961,963,966,968],{"class":95,"line":940},95,[41,942,943],{"class":127},"    List",[41,945,132],{"class":131},[41,947,136],{"class":135},[41,949,139],{"class":131},[41,951,952],{"class":99},"ActivityContents",[41,954,146],{"class":145},[41,956,149],{"class":145},[41,958,152],{"class":127},[41,960,132],{"class":99},[41,962,136],{"class":135},[41,964,965],{"class":99},">(File.",[41,967,382],{"class":103},[41,969,970],{"class":99},"(GameActivityFileName));\n",[41,972,974],{"class":95,"line":973},96,[41,975,121],{"emptyLinePlaceholder":120},[41,977,979,982,985,987,990,993],{"class":95,"line":978},97,[41,980,981],{"class":135},"    int",[41,983,984],{"class":99}," LoadLibraryIndex",[41,986,146],{"class":145},[41,988,989],{"class":145}," -",[41,991,992],{"class":872},"1",[41,994,995],{"class":99},";\n",[41,997,999],{"class":95,"line":998},98,[41,1000,121],{"emptyLinePlaceholder":120},[41,1002,1004,1007,1009,1012,1015,1017,1020,1023,1025,1028,1031],{"class":95,"line":1003},99,[41,1005,1006],{"class":145},"    for",[41,1008,173],{"class":99},[41,1010,1011],{"class":135},"int",[41,1013,1014],{"class":99}," i",[41,1016,146],{"class":145},[41,1018,1019],{"class":872}," 1",[41,1021,1022],{"class":99},"; i ",[41,1024,132],{"class":145},[41,1026,1027],{"class":99}," ActivityContents.Count; ",[41,1029,1030],{"class":145},"++",[41,1032,1033],{"class":99},"i)\n",[41,1035,1037],{"class":95,"line":1036},100,[41,1038,121],{"emptyLinePlaceholder":120},[41,1040,1042],{"class":95,"line":1041},101,[41,1043,289],{"class":99},[41,1045,1047],{"class":95,"line":1046},102,[41,1048,121],{"emptyLinePlaceholder":120},[41,1050,1052,1055,1057,1059,1061,1064,1067,1070,1073,1075,1078],{"class":95,"line":1051},103,[41,1053,1054],{"class":145},"        if",[41,1056,173],{"class":99},[41,1058,952],{"class":127},[41,1060,132],{"class":145},[41,1062,1063],{"class":99},"i",[41,1065,1066],{"class":145},">",[41,1068,1069],{"class":99},".",[41,1071,1072],{"class":103},"Contains",[41,1074,107],{"class":99},[41,1076,1077],{"class":110},"\"System.loadLibrary\"",[41,1079,1080],{"class":99},"))\n",[41,1082,1084],{"class":95,"line":1083},104,[41,1085,121],{"emptyLinePlaceholder":120},[41,1087,1089],{"class":95,"line":1088},105,[41,1090,395],{"class":99},[41,1092,1094],{"class":95,"line":1093},106,[41,1095,121],{"emptyLinePlaceholder":120},[41,1097,1099,1102,1104],{"class":95,"line":1098},107,[41,1100,1101],{"class":99},"            LoadLibraryIndex ",[41,1103,219],{"class":145},[41,1105,1106],{"class":99}," i;\n",[41,1108,1110],{"class":95,"line":1109},108,[41,1111,121],{"emptyLinePlaceholder":120},[41,1113,1115,1118],{"class":95,"line":1114},109,[41,1116,1117],{"class":145},"            break",[41,1119,995],{"class":99},[41,1121,1123],{"class":95,"line":1122},110,[41,1124,121],{"emptyLinePlaceholder":120},[41,1126,1128],{"class":95,"line":1127},111,[41,1129,819],{"class":99},[41,1131,1133],{"class":95,"line":1132},112,[41,1134,121],{"emptyLinePlaceholder":120},[41,1136,1138],{"class":95,"line":1137},113,[41,1139,830],{"class":99},[41,1141,1143],{"class":95,"line":1142},114,[41,1144,121],{"emptyLinePlaceholder":120},[41,1146,1148,1150,1153,1155,1157,1159],{"class":95,"line":1147},115,[41,1149,269],{"class":145},[41,1151,1152],{"class":99}," (LoadLibraryIndex ",[41,1154,869],{"class":145},[41,1156,989],{"class":145},[41,1158,992],{"class":872},[41,1160,460],{"class":99},[41,1162,1164],{"class":95,"line":1163},116,[41,1165,121],{"emptyLinePlaceholder":120},[41,1167,1169],{"class":95,"line":1168},117,[41,1170,289],{"class":99},[41,1172,1174],{"class":95,"line":1173},118,[41,1175,121],{"emptyLinePlaceholder":120},[41,1177,1179],{"class":95,"line":1178},119,[41,1180,1181],{"class":617},"        \u002F\u002F Insert in reverse order\n",[41,1183,1185],{"class":95,"line":1184},120,[41,1186,121],{"emptyLinePlaceholder":120},[41,1188,1190,1193,1196],{"class":95,"line":1189},121,[41,1191,1192],{"class":99},"        PluginLibraryReferences.",[41,1194,1195],{"class":103},"Reverse",[41,1197,1198],{"class":99},"();\n",[41,1200,1202],{"class":95,"line":1201},122,[41,1203,121],{"emptyLinePlaceholder":120},[41,1205,1207,1209,1211,1214],{"class":95,"line":1206},123,[41,1208,370],{"class":103},[41,1210,373],{"class":99},[41,1212,1213],{"class":127},"Reference",[41,1215,1216],{"class":99}," in PluginLibraryReferences)\n",[41,1218,1220],{"class":95,"line":1219},124,[41,1221,121],{"emptyLinePlaceholder":120},[41,1223,1225],{"class":95,"line":1224},125,[41,1226,395],{"class":99},[41,1228,1230],{"class":95,"line":1229},126,[41,1231,121],{"emptyLinePlaceholder":120},[41,1233,1235,1237,1239,1241,1244],{"class":95,"line":1234},127,[41,1236,406],{"class":99},[41,1238,104],{"class":103},[41,1240,107],{"class":99},[41,1242,1243],{"class":110},"\"Adding library reference {0} at line {1}\"",[41,1245,1246],{"class":99},", Reference, LoadLibraryIndex);\n",[41,1248,1250],{"class":95,"line":1249},128,[41,1251,121],{"emptyLinePlaceholder":120},[41,1253,1255,1258,1260,1262,1265],{"class":95,"line":1254},129,[41,1256,1257],{"class":99},"            string ShortName ",[41,1259,219],{"class":145},[41,1261,222],{"class":99},[41,1263,1264],{"class":103},"GetFileNameWithoutExtension",[41,1266,1267],{"class":99},"(Reference);\n",[41,1269,1271],{"class":95,"line":1270},130,[41,1272,121],{"emptyLinePlaceholder":120},[41,1274,1276,1278,1281,1284,1286,1289,1292],{"class":95,"line":1275},131,[41,1277,448],{"class":145},[41,1279,1280],{"class":99}," (ShortName.",[41,1282,1283],{"class":103},"StartsWith",[41,1285,107],{"class":99},[41,1287,1288],{"class":110},"\"lib\"",[41,1290,1291],{"class":99},")) ",[41,1293,1294],{"class":617},"\u002F\u002F Without the lib prefix\n",[41,1296,1298],{"class":95,"line":1297},132,[41,1299,121],{"emptyLinePlaceholder":120},[41,1301,1303],{"class":95,"line":1302},133,[41,1304,471],{"class":99},[41,1306,1308],{"class":95,"line":1307},134,[41,1309,121],{"emptyLinePlaceholder":120},[41,1311,1313,1316,1318,1321,1324,1326,1329],{"class":95,"line":1312},135,[41,1314,1315],{"class":99},"                ShortName ",[41,1317,219],{"class":145},[41,1319,1320],{"class":99}," ShortName.",[41,1322,1323],{"class":103},"Substring",[41,1325,107],{"class":99},[41,1327,1328],{"class":872},"3",[41,1330,114],{"class":99},[41,1332,1334],{"class":95,"line":1333},136,[41,1335,121],{"emptyLinePlaceholder":120},[41,1337,1339],{"class":95,"line":1338},137,[41,1340,645],{"class":99},[41,1342,1344],{"class":95,"line":1343},138,[41,1345,121],{"emptyLinePlaceholder":120},[41,1347,1349,1352,1355,1358,1361,1363,1366,1370,1373,1376,1379,1381,1384],{"class":95,"line":1348},139,[41,1350,1351],{"class":99},"            ActivityContents.",[41,1353,1354],{"class":103},"Insert",[41,1356,1357],{"class":99},"(LoadLibraryIndex, String.",[41,1359,1360],{"class":103},"Format",[41,1362,107],{"class":99},[41,1364,1365],{"class":110},"\"",[41,1367,1369],{"class":1368},"sAO_F","\\t\\t",[41,1371,1372],{"class":110},"System.loadLibrary(",[41,1374,1375],{"class":1368},"\\\"",[41,1377,1378],{"class":110},"{0}",[41,1380,1375],{"class":1368},[41,1382,1383],{"class":110},");\"",[41,1385,1386],{"class":99},", ShortName));\n",[41,1388,1390],{"class":95,"line":1389},140,[41,1391,121],{"emptyLinePlaceholder":120},[41,1393,1395],{"class":95,"line":1394},141,[41,1396,819],{"class":99},[41,1398,1400],{"class":95,"line":1399},142,[41,1401,121],{"emptyLinePlaceholder":120},[41,1403,1405],{"class":95,"line":1404},143,[41,1406,830],{"class":99},[41,1408,1410],{"class":95,"line":1409},144,[41,1411,121],{"emptyLinePlaceholder":120},[41,1413,1415,1418,1421,1424,1427],{"class":95,"line":1414},145,[41,1416,1417],{"class":99},"    File.",[41,1419,1420],{"class":103},"WriteAllLines",[41,1422,1423],{"class":99},"(GameActivityFileName, ActivityContents.",[41,1425,1426],{"class":103},"ToArray",[41,1428,1429],{"class":99},"());\n",[41,1431,1433],{"class":95,"line":1432},146,[41,1434,121],{"emptyLinePlaceholder":120},[41,1436,1438],{"class":95,"line":1437},147,[41,1439,841],{"class":99},[41,1441,1443],{"class":95,"line":1442},148,[41,1444,121],{"emptyLinePlaceholder":120},[41,1446,1448],{"class":95,"line":1447},149,[41,1449,1450],{"class":617},"\u002F\u002F PLUGIN DEPLOYMENT END\n",[11,1452,1453],{},"这样一来就可以正常的进行运行工作了，不过由于使用了源码版，有时候编译时间就会比较长了。所以建议在项目打包的时候再进行设置。",[11,1455,1456,1457,31],{},"FMod还有一些其他需要注意的打包事项，例如Bank文件目录等的设定，由于没有使用到那些功能所以没有进行尝试，详情可参照",[41,1458,1459],{},"FMod官方文档",[18,1461,1462],{"id":1462},"目录访问",[11,1464,1465],{},"当前UE4在Android下默认是没有提供访问整个设备的文件的接口的，但是如果是音乐游戏之类的游戏的话，就会需要用到这样的功能。",[11,1467,1468],{},"在AndroidFile.cpp中，我们可以看到，所有的函数都有提供AllowLocal的参数，但是FAndroidPlatformFile在进行IPhysicalPlatformFile的接口实现时使用的却全部是默认的False。AllowLocal参数最终是传递给PathToAndroidPaths这个函数的，因此，直接在该函数中添加",[84,1470,1475],{"className":1471,"code":1473,"language":1474},[1472],"language-text","AllowLocal = true;\n","text",[91,1476,1473],{"__ignoreMap":89},[11,1478,1479],{},"强制打开本地路径访问即可。同时，这个文件中有开放两个在调试文件访问时比较实用的宏，有需要的时候可以打开",[84,1481,1484],{"className":1482,"code":1483,"language":1474},[1472],"#define LOG_ANDROID_FILE 1\n#define LOG_ANDROID_FILE_MANIFEST 1\n",[91,1485,1483],{"__ignoreMap":89},[11,1487,1488],{},"另外需要注意的是，FPaths提供的一些函数在Android下并不能很好的运行，经常返回不符合预期的结果。",[11,1490,1491],{},"目前观测到的有",[36,1493,1494,1497,1500],{},[11,1495,1496],{},"FPaths::ConvertRelativePathToFull需要使用IAndroidPlatformFile::GetPlatformPhysical().FileRootPath进行代替",[11,1498,1499],{},"FPaths::GetPath会对根目录返回空字符串",[11,1501,1502],{},"FPaths::IsDrive会对所有的一级目录返回True",[11,1504,1505],{},"使用的时候需要千万注意。",[18,1507,1508],{"id":1508},"功能限制",[11,1510,1511],{},"UE4在移动模式下是有很多功能限制的，如果游戏是面向移动平台的话，最好在添加新功能的时候使用移动平台模拟进行测试，否则到最后就可能真的积重难返了。",[11,1513,1514],{},"目前遇到的限制有：",[36,1516,1517,1520],{},[11,1518,1519],{},"APEX的破碎物体无法作用",[11,1521,1522],{},"部分粒子特效无法显示",[11,1524,1525,1526,31],{},"UE4对移动设备的兼容性也是需要在事先进行调查的，官方的说明在",[25,1527,30],{"href":1528,"rel":1529},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FINT\u002FPlatforms\u002FAndroid\u002FDeviceCompatibility\u002Findex.html",[29],[11,1531,1532],{},"引擎自带的示例项目在没有安装第三方插件的情况下，是可以直接通过的，用来测试环境的配置是否正确非常方便。",[11,1534,1535],{},"总体而言UE4的移动端表现还是非常不错的。",[1537,1538,1539],"style",{},"html pre.shiki code .s0idv, html code.shiki .s0idv{--shiki-default:#0E1116;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .scAT4, html code.shiki .scAT4{--shiki-default:#622CBC;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sZnmU, html code.shiki .sZnmU{--shiki-default:#032563;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .ss1GH, html code.shiki .ss1GH{--shiki-default:#0E1116;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .suI3T, html code.shiki .suI3T{--shiki-default:#702C00;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sGZGq, html code.shiki .sGZGq{--shiki-default:#A0111F;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sLXdl, html code.shiki .sLXdl{--shiki-default:#A0111F;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sZdD5, html code.shiki .sZdD5{--shiki-default:#66707B;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html pre.shiki code .stP0Q, html code.shiki .stP0Q{--shiki-default:#023B95;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sAO_F, html code.shiki .sAO_F{--shiki-default:#A0111F;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":89,"searchDepth":117,"depth":124,"links":1541},[1542,1543,1544,1545],{"id":20,"depth":117,"text":20},{"id":61,"depth":117,"text":61},{"id":1462,"depth":117,"text":1462},{"id":1508,"depth":117,"text":1508},"2015-08-01","md",{"layout":1549,"status":1550,"published":120,"author":1551,"author_login":1552,"author_email":1553,"author_url":1554,"wordpress_id":1555,"wordpress_url":1556,"date_gmt":1557,"excerpt":1558},"post","publish",{"display_name":1552,"login":1552,"email":1553,"url":1554},"chaoshikari","chaoshikari@gmail.com","\u002F",1463,"\u002F\u002F?p=1463","2015-08-01 11:27:14 +0000",{"type":8,"value":1559},[1560],[11,1561,13],{},"\u002F2015-08-01-ue4-package-logs-android",{"title":6,"description":13},"_legacy\u002F2015\u002F2015-08-01-ue4-package-logs-android",[1566,1567],"UE4","Package","LA841B_nk48EEoA1Vn8rmA1yi-rgmXfVCpbsWXUiUis",{"id":1570,"title":1571,"body":1572,"date":1546,"description":1576,"extension":1547,"meta":1682,"navigation":120,"path":1691,"seo":1692,"stem":1693,"tags":1694,"__hash__":1695},"blogs\u002F_legacy\u002F2015\u002F2015-08-01-ue4-package-logs-windows.md","UE4游戏Package记录（Windows）",{"type":8,"value":1573,"toc":1676},[1574,1577,1579,1582,1585,1588,1594,1597,1600,1603,1606,1609,1612,1615,1642,1645,1648,1651,1654,1657,1662,1665,1668,1673],[11,1575,1576],{},"最近对UE4的Package功能进行了使用，整体而言打包功能比想象中复杂一些，限于设备原因只做了Windows和Android的打包。",[11,1578,16],{},[11,1580,1581],{},"面向Windows的打包相对简单，基本只要直接使用即可。",[18,1583,1584],{"id":1584},"视频设定",[11,1586,1587],{},"主要的问题之一是，当前无法在引擎中对游戏的目标分辨率进行设置，在某些情况下会导致打包的效果和PIE的效果相差很大。不过引擎在C++中有提供接口来进行相关的控制，一般在GameMode的BeginPlay中直接调用就可以设置成功了。",[84,1589,1592],{"className":1590,"code":1591,"language":1474},[1472],"do{\n\n    if(GEngine == nullptr) break;\n\n    UGameUserSettings* Settings = GEngine->GameUserSettings;\n\n    if (Settings == nullptr) break;\n\n    int32 Width = 1920, Height = 1080;\n\n    Settings->RequestResolutionChange(Width, Height, EWindowMode::Type::Windowed, false);\n\n    Settings->ConfirmVideoMode();\n\n    \u002F\u002FSettings->RevertVideoMode(); \u002F\u002F 本操作可以取消分辨率更改\n\n    Settings->SetScreenResolution(Settings->GetLastConfirmedScreenResolution());\n\n    Settings->SetFullscreenMode(Settings->GetLastConfirmedFullscreenMode());\n\n    Settings->SaveSettings();\n\n     Settings->ScalabilityQuality.AntiAliasingQuality = 3;     \u002F\u002F Epic\n\n     Settings->ScalabilityQuality.ResolutionQuality = 3;     \u002F\u002F Epic\n\n    Settings->ApplyNonResolutionSettings();\n\n    Settings->SaveSettings();\n\n}while(false);\n",[91,1593,1591],{"__ignoreMap":89},[11,1595,1596],{},"上面的ScalabilityQuality是可以在编辑器中进行设定的，对应关系如下",[11,1598,1599],{},"另外名为Screen Percentage的属性是在PostProcess的属性中进行设置的。以及，如果要修改抗锯齿的方式，也需要在PostProcess中进行。",[18,1601,1602],{"id":1602},"运行黑屏",[11,1604,1605],{},"打包之后运行直接黑屏的话可能是由很多原因引起的，不过如果是在打包测试的过程中直接使用新项目，或者之前没有进行过设置变更的话，还是可能遇到。原因是没有对默认地图进行设置，主要表现是，完全的黑屏，但是调试输出却可以显示在屏幕上。",[11,1607,1608],{},"在【项目设置>>项目>>地图&模式】中进行修改即可。",[18,1610,1611],{"id":1611},"莫名的链接错误",[11,1613,1614],{},"这个错误的出现几率比较低，而且链接错误有很大的可能性是其他原因引起的，所以排查起来很麻烦。如果之前都是正常的却突然出现类似这样的情况：",[36,1616,1617,1624,1627,1630,1633,1636,1639],{},[11,1618,1619,1620,1623],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool: ",[41,1621,1622],{},"1\u002F1"," Link Test_mp.exe",[11,1625,1626],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool:      ڴ      F:\\Unreal\\Test_mp 4.10\\Binaries\\Win64\\Test_mp.lib  Ͷ    F:\\Unreal\\Test_mp 4.10\\Binaries\\Win64\\Test_mp.exp",[11,1628,1629],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool: UELinkerFixups.cpp.obj : error LNK2019:  ޷        ⲿ     \"void __cdecl EmptyLinkFunctionForGeneratedCodeOnlineSubsystemSteam(void)\" (?EmptyLinkFunctionForGeneratedCodeOnlineSubsystemSteam@@YAXXZ)   ÷    ں    \"void __cdecl UELinkerFixups(void)\" (?UELinkerFixups@@YAXXZ)  б",[11,1631,1632],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool: UELinkerFixups.cpp.obj : error LNK2019:  ޷        ⲿ     \"void __cdecl EmptyLinkFunctionForStaticInitializationUE4Game(void)\" (?EmptyLinkFunctionForStaticInitializationUE4Game@@YAXXZ)   ÷    ں    \"void __cdecl UELinkerFixups(void)\" (?UELinkerFixups@@YAXXZ)  б",[11,1634,1635],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool: UELinkerFixups.cpp.obj : error LNK2019:  ޷        ⲿ     \"void __cdecl EmptyLinkFunctionForStaticInitializationOnlineSubsystemNull(void)\" (?EmptyLinkFunctionForStaticInitializationOnlineSubsystemNull@@YAXXZ)   ÷    ں    \"void __cdecl UELinkerFixups(void)\" (?UELinkerFixups@@YAXXZ)  б",[11,1637,1638],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool: UELinkerFixups.cpp.obj : error LNK2019:  ޷        ⲿ     \"void __cdecl EmptyLinkFunctionForStaticInitializationOnlineSubsystemSteam(void)\" (?EmptyLinkFunctionForStaticInitializationOnlineSubsystemSteam@@YAXXZ)   ÷    ں    \"void __cdecl UELinkerFixups(void)\" (?UELinkerFixups@@YAXXZ)  б",[11,1640,1641],{},"MainFrameActions: 打包 (Windows (64位)): UnrealBuildTool: F:\\Unreal\\Test_mp 4.10\\Binaries\\Win64\\Test_mp.exe : fatal error LNK1120: 4    ޷        ⲿ",[11,1643,1644],{},"可以尝试在打包设定中勾选Full Rebuild",[11,1646,1647],{},"不过需要注意的是，如果使用的是源码版的引擎的话，会消耗大量的时间。",[18,1649,1650],{"id":1650},"杂项记录",[11,1652,1653],{},"打包的过程中还遇到了一些其他的错误，这里姑且记录一下。",[11,1655,1656],{},"在打包完成之后运行游戏始终出现这样的错误：",[36,1658,1659],{},[11,1660,1661],{},"Windows 无法访问指定设备、路径或文件。您可能没有合适的权限访问这个项目。",[11,1663,1664],{},"最后解决办法是把安全软件给关掉，有的安全软件会在没有任何提示的情况下将文件给隔离\u002F删除掉。",[11,1666,1667],{},"还有一个错误是在Ship打包的时候，运行游戏出现错误：",[36,1669,1670],{},[11,1671,1672],{},"Failed to open descriptor file ‘..\u002F..\u002F..\u002FBlank-Win64-Shipping\u002FBlank-Win64-Shipping.uproject’",[11,1674,1675],{},"这个似乎是打包功能的Bug引起的，又或者就是这样的设定。总之将对应的文件名进行修改就可以了，修改运行文件本身的文件名也是可以的。",{"title":89,"searchDepth":117,"depth":124,"links":1677},[1678,1679,1680,1681],{"id":1584,"depth":117,"text":1584},{"id":1602,"depth":117,"text":1602},{"id":1611,"depth":117,"text":1611},{"id":1650,"depth":117,"text":1650},{"layout":1549,"status":1550,"published":120,"author":1683,"author_login":1552,"author_email":1553,"author_url":1554,"wordpress_id":1684,"wordpress_url":1685,"date_gmt":1686,"excerpt":1687},{"display_name":1552,"login":1552,"email":1553,"url":1554},1469,"\u002F\u002F?p=1469","2015-08-01 11:45:05 +0000",{"type":8,"value":1688},[1689],[11,1690,1576],{},"\u002F2015-08-01-ue4-package-logs-windows",{"title":1571,"description":1576},"_legacy\u002F2015\u002F2015-08-01-ue4-package-logs-windows",[1566,1567],"LXryStv443cfAY5PNs0jvzqSL3ss1urTELS9PdUjGKg",1788763180387]