Попробовал Genymotion и Memu, последний больше понравился версия 4.2.2 работает быстрее bluestack и бесплатный, без всякого шантажа. Немного доработал launcher под него, сильно не старался с красотой - как говорится лишь бы работало (там проблема в том что нельзя останавливать adb запущенный при старте эмулятора, иначе потом не дает установить приложение - пишет device offline). А можно ли как то залить сюда его exe-ник? Или только ссылкой со стороннего ресурса? Вот текст измененного launchera (использован компонент EnvVars из альтернативной сборки, хотя наверно можно без него, после долгих танцев с бубном подумал что надежней использовать adb из папки эмулятора), вдруг кому пригодиться. emulauncher.sha: Add(MainForm,2953706,56,196) { Width=471 Height=391 Caption="Запуск в эмуляторе" BorderStyle=1 Icon=[ZIPEE3A000078DACD7A07585447F73EA889B1C5868820BD2DBBECB28DBEC082F40ED20595A2540DBD2A4B071594AA486F8228A2B1C45EB1C4A8D1186BF4B3448D8951A3B11BEE9CDFCC65313EF98CF1FBC7983FCFF33EB3DCBD77EF7B66CE397366DE91919195192AC3E5CAE0564D66B5B68C8C918C8C8C9A9AF4FF71323257F0B571E306FE8F1A262353846F60E07BF02332B36506AE93BF1C6D997FE44F23C24B5623DC93C65FDDAB1DE6294B20F3FFC99FB2AFDDF0511A4A5346B1D40D46315418A335A78E52F2B21EFAC7FB949C45C346A9298E1DADA1A4395A5D4945CE843D423372FA907F8BB76EF24CD9495CDDF17236C27C7E5AD8F969C5094F1C8B13EFB3425C7B47284FB6560FF518FA1AF791E38D58D1C28C883EEFDA9C9F7C57E4DC644778778E549D22C6360CFD37F8AB043A0E5571B1F4D72D8D7FCCA94EEB37A84C41C2F26464901BF5728ABFEDDE0942E6A7E43EF519CE43941DCCC43A59613F0BCA12FBCDAAD391E5F24C4AB838FEA54A8447DF4413F6F87F83BF5EA0CB4851C6DC46CDE56948A72615E955A502B32C0134B3239052B83B3541A8A7AF16EC2CAB2D36FED8C4DB699162422052974420BD9279C05A341FB4F3A3905A723092B73536510F75FFE0F1A017E432DA3C2BB2530BF3D7AD4E43CC8A64602E9E0F1A69334131C4094D36E70A74C3BD64B91E76C3CDFCDC2AE4E77A2095E410A49B1309CC8218D096CC41EAF18148C1D154AC15E6F1C1F9B3825CC698A7CFE9D2AC4A413AE5494817F7A9CEC2085089F402796F314CB6E0099931FEB2C240B711A6BEAE2BC77A59A129A1AE48333E0874526781465230528D9E8E141C4CC5BA73A77F78FE21EE63CC92C2BAD54BE7238DC218A4913E1BD4A27D40D1CF0EE45CCC608AB5D0503F31648851A8CF48531F97BA31F646480EDBA01CE20C6AE11EA01CE181A6CE72A1FB9F11EBFFC1F9736383C659A4446C54480C420A733C91829F2D4C76B782494E6630D1CE08C98B0581932DF84693B5D5455C77BB75A3ADF9688283099AEC61098A5ED6A0E025460ADED684BF352371C607E5CF480B95E546074E309F13B069ACAF0D92F3B3456A611EC09A170846E91160B1301AD948622F3B14C45F702D4EBAE85D9671DF65710A722C4E42D6B97160941A0A5AE19E48C9CF0E8D61AABB8FE3E97EA21D1FF4416CD09C3B7DC8441E436E928019C78C0DB8C2CE9E0BB64BD3C0BB360FBCEBF2C1AD36079C6A25E0B4320739D7E7526E0D7994676301F2692A8480E622086A2A86C0C62298BE2207D92F4D43828CF0AB2ADE36F563D95A020567D127FF34FFF1DAAA93349D2CF2B51684FD82F32032ABC904B395D960549F0D860D1210346683A04902C2E61C306CCE05E3963C30C1AD594B2E88702BC2F758D46583797506982E4D0661611CC55E10F19BCA2CD743A355A7D86BC6F8FE6373329E738730ED4569C2B2A4C7BA2BD229565336E8B7E501BBA3000C561582416721706914016F10F83A0D7C0FBF3D1F78F87E1EB6C5A051029CBA2C60E17983B1F833A49119DA3F35DCFDFC58AE8EE2FBE0AAE86D43EA9591A335A67E3A464B79B86E52C810791BC38FBDAB2487780DD914B3594273E760BE065D45C0ED2AC628A2C1C39F09F8F8338D4E8242E0133B880D843F1E234EC34260AFC80056450AE82DFE8CD24A99492978587969E378D6C039491DD7476AE19E43D4FE87F94137234C56DE983D613C9F91A61DE4BC9335CBE32B5507B3F6317AEAC69F6A2ACB0775945DE735E550ACB6DC817EC7FC0C5663EEDD25347852F00781BF1310744AEDC0CF9031E062FF32C0BEC6A9CD04361E03565902D2CE0A43F2CEE6890AEE56C3874F9EC09CC4D4F45160EB848C519D62896363B446B4EF5FDAA111E6F191A68775984E51EC237D5CAF3017CDA358D973287917F3EDF2E3C79BB83416DEE634662316E97BE23383DCD72C029E14FCD720C0DFD1181C0FE918705BA563B0320BD8D5E9C02A25FCC3D1589E6EC60805393E7B5ED0618FBADC9F3C1AF2EE1B4AA22E8FD1D78C54F4B219F557FC39B1819F9AE5C5F568B5642346D342A4877D54B732999A9A18745755432D5C589DF113B361211AF41D9AFB5ACC7BED621A7C29048320360CDAB1BA841E03120FAFF8D72D18E0BF241E692F8C4072C6FA054A1EE2D5AC860508C71245A0DF2CF94D3D75E6771A9F05F075B2C2DF3A06BCD4B0F116A5C95B745A2508FB3862D62F005C9B512A4933EE2B6BA947F2AAD27F623662FEED79037E8FB9737B30F79E2534F8520868BC6EC3C0380C8E01B72D1F0CB00F71EA1702A706F3C731AC953D074DB1362A550B71DD4FDECDED2E46BCEE6260B7E5525A9239B7C69B1B58E11AE5ADFC850B22E52C2B3376E8B6E520566B2ED2C73ECAAC49A3549283EF296BAACDA1F9376523DAF7B1EFF008F77598736FE92B085E83107F2724B648EDE00F8E017E9E1E83061C03CB3306FA1FF357B236AA540D76D9C7C2FC796B4A10F1414E473EA59D1BF9D308B529F67FE53F4605F32659D52CD8CD68CBC53E8EF93711FEE9A4FFEFA86AAA87F3AB33EE339B2488BD0AF327B18AF9F108EFF56534048320DC0741DB201D0B694CF33A880FE50DF05F9139E0FFB8269D6C29289FEA67BF5BBF25877047023CBE061D05944E7E14E6AFE8F857FC4DCA92275BD566EF67B4E7611FC947D8F780B52283E6AFAEAD1921A8C97CC8C2BFCD26BE4FFC5ECA5DF0F952106C1880F075E0EF6848EDA0C780D82D8D633A06700ED227F927672E52B01296AB06380EF05FBB18111F345885F917C4DC1BA9AEE4F136EEFCFA6C59B3CA8C29E286DC3EBD55F9A08FC798DD9203ACDA4CE23F773474B5227852FE1CE2FBF8B7E97E27BC3F5F4643B811E37329F075431AAFF127F14DF89379A25D1A03B559987F22D2C989448AD646D5EA81CEBBC93B30779A3F8961DDA2D87B2335DECE5FD094236B5693A564D5987B08F3C73E52086CECA3AC9599946A72F08F1ADA9AA1DC9A8C87242E3852DFA1B913CE1BCB41B8690086041BA5C076D0908E011DD7741C140FE421320F901CBA3409E9E44611FE756A018EBBF4F13B04EB9620F20C9E1329DD92790F466A4EF57B2BFF965C59F3BA6C15ABD6822FF5BA0A681FE1E03CC3AACBA2949366DCD2663343792BB29EB2B05F19905CBF1EFB0EF11BC27BF320F70A30DC5C316003695FD9F1FB38903E7DC59FCCC5380711FEBA7951485EC4AB55F29EB685F0C7F722E27BDCD5C594EEA2790F31FFC0B7F26FCBC7FC252A96983F737511ED2338F641BF7E01F1FF5B7A0283307EED82E7D8AF9001F103CC4740FA1DF3146EA904C3D7603408FC9D11B1098F91A1341E0464DCBA17D1F5111DC33847B3972563FED1387EF9B52AD36D37E3F985704742FC0E9C47294669FCA3915ACA216FCD9DED05B2A2A65C0DCB8EE2E3CCEE228AE4171C3BA0DFB010F30FBEC5147243F92B173EC7E382B88403F1F941EE5F1054D1307A1DAF6C28A76DA0639A8C018E7D3EA999E81C84E780F264C4288826F1DBA4EA6BBF85E40EE1E74B1119379247F5CAE29F8CD2560E7F1B7FC3D525B2A2D6024D8B8EA213AC352514F1115253D2FC1382BED7356005F3EAB39F73F0BCC225BE43F8607EC2AD98F7D66A301AC4B66A3026D84A5005C6C48E411B5EF197FA10896192432B5210A33016E1355BCB544F9BF5EC8E7C84ED45C4F7F0BC8EF4962662FE2A6FE56FDABB54D6725589B64567F149FDB5983FC95DD887D84DD9944A62D07596997036AF31A79F83FB83477C87F43DE1BE6D80B3D1F61A1AC604B40DD2762B198B8171207C884F0CF810CE01ED781EC3B5B441652AD22B8AC5FECF6D9EEA215E8BE71784638880CC9188599EF47C34432DE66DFC2D3656C95A779732445D8B4EEBF72CA2487EC4B183F94B30FF19D73862B3501C238883E38A4FE215F7AFE18EE560B46B050DE35DB560B25B0AF2995CDB8981EF213691B1A1E3037322731C9FCCDD9D0331CC257B30C571689225BF45C5CB662DF1511CFF04C0C779885991FC62949EDABCB7F1B7DC5443F337EF2A39ADBF6E31C5ED5D82EBCA1260374B28E584C0FFE88B4D8285AB4B1017F70B1FF7AB70E77230DCB3128CF6D581495F03981D6E06D19116B03CDA0A5647DB06F0652B581E6E018B834D60BEAF9EB6898C15C9B7A4D620EB04031203CBD3915EC97C2467C9EBC4EBFB4E0ECE1F865B2A08C87D885999F262144BE3ADFCC55B56C88A7BCB75CC36969FE2EEACEE37DCB59C8E4183EEE27ED5ACD08B3A3626DED6875BFB6D2EAC43D32EAC07DBB3EBC0F64417D81F6E07879D8D60BF6905D8F554C0B4AE5210B7168355633E9837E48071DD423024C07E2EC0BE22C07CE9B518A98348FD8D5B36AEC91955296892AD518B928F6D33676D09C27E89C898E13906E11AECC528B666DC5FD50F163D6513DC8F77AFF3B97B909A75F730E57D630765F5F52A4AA72C7E877642B066E4A59D17FD36ACA0D87141A0EE260605731EE0F50E4CC29037E1C064110FA6580A608AB52128D91801AEC740117F56B412C214D1C0BD72023D98C8D181896C2D90E33240C1940BBAD31D103F2608A9CC708AD52B88293239D24C395EE8A5ECBE5D8BCC0E35F6EB77163C19CDD599F557FC6D7636C8FAEC5E2D1F7FE64443DE933B47A31F9F3B1670B27795F9AA62153557F1188D19CE554695E9BF9AB61721A3DE3230C5FE60DED704A2AFDAC0E27807589C5805965F7762E0967C3EBE0A2C8E758008FB12F12DF3838D6046FC88C403C9BFB88EC6351518E6C622EDD9EEDFC999B045864B9234227F3EF1656EFF9DC711FD172987FB7B1FF27754D70B3A8A26BFCB1AD2667B9DAC5DEBB291EE5BDBD43C77B5ABBB76978F16F52E93E5C6CD5071DAD7F8AB615F03323ADC04265FB68029F675330C73CC9FB601C392E0681B1D07164730B0FF8BB0FF9BED6F00D3BD75749C933C25C4BE49E66F5207E23A17E92E4D40E36D848BD5E74CFFD8715D8D66C8CE75819F5D3C96E4B0ADD1DBB0B364E2FFBA86B7E858246BB9A66C88D5FA0A7ACDA0ED6933D6E670CBF72627DA9129EE5FF3939D203AD50596185618E26F5683CD37DD300DB7D34E619CEC021B3C16D6780CACBE6A074B6C8BA88FD8518F6D580186DBABE9DA89AC21709D8534CBE2917A527032BF5E3284BB3CEBBDEF671957660C151F6A3E60737E1D657E762D589C5B0B96E77A407CB6076CF0FFB6E7D681FDF95E703CBF1E03B7F87F87333D607F7A0DD8625B881D96381F99E3B120E36082732B5D27915CBAAA1069972761FE216E82C69C7F6C2F8ED7949DE9776BE74BEB6B9B91D5D58DE0707923445FDA09AE173F07C72B9BC1EDFBADE0F9FD36F0BC8E716D2B78906B97378133CE57C4161B6C87C5B1769CB3DA20706F3BC9EDB40DC2EE4594F6B284DBBA092172FF1477C7831DB2E66B4ACD67FE7CE09AEFFD0394F5ED6D90F5E35770E7F9635873FF3BF0FA6117F8DCD90B7E3FEF8300823BFBC0EFF61EF0B9B983B6C515DBE170AE172CB0DF6DF8F102DCFAF51770D9B41C0CBEA820FB0094466174BBA86BC93FBA0F3A6D4FE308F7533D8B93A88BC8F3C91194F2F8145CE97F04875FFC0CB31F1D859067C760D6F313104AF0F438CC7E8CAF3D388CEDD90FD3B17DAE57B780D3850D70E5E92F70EDE90370FA72157077D450FAED79FF51F4B333F9107BB8EC943095F46757BE8FA02EF487F57F0B29BF9D83C4976760F66FA72094FA1622D13988A6711622FB4F43F8CB931082EDF0BFDF071ED806FBAB9B21E4D236F03FB7090C8F3421DEAEE5145EE7E58ABA978CF810FC03BED924EB7EBCD759F2F8872B31E81A958C6EA079700532E00624C3F79008D72081C655980797200ACE4368FF29087AFA1578DEDB0F4E3FEC009BAB9BC002CFE3C65FB5927ABC4777AEEFC71F52039871FA8B4F669EDAED97FFDB834719E82E4A473F61FE77A00E5E603C850AF895462ADC8448F80E66A16F21E0E571707FD8070E777681F8FA1624FAAE97C2EBE50D860D12AD695B6A3EB806137171AFACEF17ABA7CD39DD7721A1FF2E25810754363C4495F01CB5C36FA813FA2117EEC14CB884FCE05BE4D17F82727C7A18393CC0B17F7513C5ABCD5C675A9335D2714FD3BFA2C7879DDF3B44DDCBCE9053B7E0B4DFE99D078A9FDCBF50801E537940F008E5C1AF281C6E51EE7011B9C159E489CE50812F4E3D0DB9B967B3DDD75D27B432427732E282C6D9ED69FCE0FCFD8F6F965577B119AF5796B0D578F78A938E1BEAC787EDDE384A72F3B2EBC2AF8F15E4DDBAB6B9E4D1BDFDC54FEE1DCC7970734FFAF56F9B93EF9E9F3F77FF7A4D8FDDADC39C562D13D97EB3E68A9C8B682133277ACC87E62FAE2B19AA3ADB3DC4E460C30DE783AB7DA22F1D958DBB725C76DE8D5343620F6D1F9A74E5E4A759F7AE28481E5C57CCF8E9825CD4C583C367DD3A32C4F7BB9DB21EA737CA3A1F5FFB89E7E5AD99DCAEC2CBF22E22CB0FCDDF6DFB2AD9E06F76FB5B6F6F8C75DFD2F6D19BEE49F9F5AA6CF2A32B43E21F5E7AA37F9864277E1478E560994EDC0CE37FC3FFFDB7AD1D1AB077C3B0BFD50FBB577F2C5E5FFDFFECFF00CB1E019076E83EBAED97CD910CB43203AD8C8CD5BBB4CF65645449FB404666ACB41D4EDA6B036D3F7999958CCC03D28EFD433BFC0FEDD8FF6EAFBDE7F68FBFFF9CB4AA3232889CAB92F21EFA063B5ED9F7FCF75655DA0F748BA4FD81FEACBF2C2D07BE970069C9392D723A4BFCFA39AD717FCFAF54839D87A904398E500D70F82FDF52F3B51BA6E6EFF0B1C62CB77F24674EB133515571B52CE5CC74DFAEE9285A2267C153A175B1101759792B8140CFDFB1C664AE5FB78A93286CAAAFED7BAD5734433D86EAC6FAD731AB52FAC97E16BB30B65FCEC164A532B659C3D56A8256ACDF318325F19471452A62E5463D917730F57DAFE70A667B7E2228883BA0539346F69B403B3B02C9BB8A0E6804398FE0DB5BA969C4FADDD3C80C45CCC218D05A188E94A6DB64BFD7333DA19E23F839D187B49725229DBC28508D9E0E136D84077523BC4798F8B86829FADA3E540C75435AF141A036DF1F297A8973DE6B5D1B1738929B167654292108298638C364774B986061704C75FA3416C3D2D846C159F448CE5584947CA6C1143F5BA4E06AF15EDFAFE96D27CF0CF33EAD3AC70B19A6868338771ED815253C735E9272D37359E66DEFCA0594E7B20CE450940082A49948D9DDAA534EC455D188FAFBE7F8E40DF5D5D443DDB7718AE27EB3AC590016751230ADCF06930609326DCA41A2E65C246ECE039BA65C9886BF13576520E3A2F92F75E6F95F1A67A0E38E39FC4FF1A812E4248BE378A826394F393F7088C9FC905E063993D09203B4B646F6D6A578FD1C02BDEF4574BFC66CD05F9E018C9279486D7EC05D0517D13B9F3B500974FC44CE94336BAAD8B074228F113C41C094F3685B745BAF59AAEB913D35297852F0073578C2A32DFF9576AD5F9E0CBAB991D4146F6B2739B16092A2955034C984C3550E72FCD3F500C3DFD14FB73CE9058E314A3B2BECD9641DF5B9A2FA9C5F685D6B5093FE83963EA03F0F68E8B4F6D9920B9CFA05A05F9142BF7F0C432D422BD2679B7D73FE43E365C977268A05B17FF67EF3855179BA2D12C46C58083AA5F148D98CB794B33CE301D15C68DB892E48349A575AF2A08E3CA05DD2FA716BDEC0F989CA54D0C1EF57B41416EB5624F7F3BA8B11A73D8F52FB2C708FFA9F9C65B12C495CCCA0B55509E82E4D44CAA6BC52CEF2CC874433E10EEA627FD08269EDAE47AA017749F7FD1B25C0AE4EC3F64721DCEF65BA952914D14C0D561522D538BF238A3EB66FAC4DAC96A52FD323FA28F635DD654948C58CBFC8A036EB09D10CB8E41C007937D9A3A7F5D0B2DF35D075A5BFEB8744BF6EC6BE5A930EBAF9D1688A057F0903BF9F6886DCAE22E293C714031CDE58D789972FA862AECA0736EE434645325233172CE290F77716A2579AE0A09629D53307B527D20FC41F68ED09FB009BC440410CC2BE5CCEA84AED279A1FF657A49E10F4B562B0D31B7DD0BA3EB796D95980C7291F1895C994BA85B010AF619E73F0733CA26F9177BEAE456EFA5DC3A3F52FE21B52ED8868D78CC218A460CA5DC6A84A7949343BA217A927057F8BDFFFC6F358E2C6BC7A16D1E770ACE955A5505AD3CC0A0D1AB25F1AE0B1A3F5C43FE871831A96A154FF11E0712063C0C5FC89F6AC571447BF5FAF3AF585704319E2AD5D843452679E570A711EF9C6F7B716B4E8638E44DBC1CF509AD626B9DCA69C975CDC77B49649B4B4579A54D500A41A14ADDF903E2063407C60E50260E21CA4606250A55793F68C684E44EFD04C9FFD9DD24C97D16FF4BFF6A20E76CF22CAA0BB18F033948EA3651EB72D9FE2AE2F430262F3F6012D89D65DA4DACB80FE423854627F584AEBC0241F12ED949C43C3F9BB82B93CFD89E1E67244F40ACDCCD0AB2A115E9FBE31FE3A8A3BD9445FC136E82DC7EF77B65A48E286FF4525229A8AD19E9560B2BF1ECC0E3681E85033586088FA1AC11C5F33257BC7B85F486C90734A240F92B3177246FA55CCDACC4778BC108E19A4B520FC9A5A8CDFD837EB3C954DA6479A298BBE263C0685FDEABE7651AEA7D7BDB03EDA8ECC375781496B011895A783B0F033E02D8C0283F408D04F9D0D7AC9B38091361B1899E124E781DEA2F9C05C9644CE2D23791BC3029CBF7E31DDB31209B75621ADBCC8AB1A71016FB4DF6D57AB41FC8F670FCD7B7CFEB2635F6B272369D614CBC5C9BB8D0AE623A62412F497C48301F66B3E39C387C7D810C79A1186617B01081AB2C1A02A15F40BE38091320B58D101C099ED755F35C8C9D4E378CF86794F2EBC70BABDEB19A7AB68B94165FA9F9E4DB7EBAE1AE5B4B95EC1B6A7FC63BE247ABC4D5FD363A323CDC8F4AB36303FD60E220CCBE31D6075AC6360EFFB681BBD8F6F7EA0114C88E685FD81F82AC9D7E47C93C2F46933CC5B8BC7796F69B771F87CA58551D7A277AE4D8D96A60C131F6BBF64FE6D37129D59035618D618B6E77AC0E1ECC01EB6DDE93530EDEB2E101F6DA7F7AF4D76AFA46393E40206F6619C83CDFE4EFD61BE61698DDB0F3B90F8DA26C8FDFE30045ED9066E37B681D7CD1DE07D633B785EFD02DC2E6DA4F9589D5805D1273782FB9695243F22FCFE9BBCD2A4BF558BDBF5B50AA29E9E7CE0F6E0003AFDF217E87E7215FC7E3D4CEF5BCE7A7414827F3904FE3FEDA5F7C6C91EFFF5670F21E7EC6EE06EA940EA69B3247F7B3FE050E730BF036B0AA3A84BBFC5F75F44F3FBCF43047516A2D10588C588A2CEC0ECE727C0EF7E1F38DDD80ABE97BE00D1F10EC46C911C356D2F927F1FF567E0A9CD9FC6DF3CDB918EEEF427A35B500A0F317E8162B80BF17015C2D019F07B7A149C7EDE0D56573722E3BE860B868DB9ECF7BAAFF9D5A64F3CD737AF4D7C76FB91043DA496C133540F2F503CFC807CE02C72EB3F41B93C3CF85874A4E5277EC9673C875D0DEF751DA81F13CCE2AE2E3AEEBFAFD72AF3DA85B49CEF2F7F51F0E4EE9994E7B7CFC5DCBF7028E6DEB7158187D788ED77D497A8C6F82E316ACE7F6FFBBE0E3DB543848D79D5E26D75B362BE3B2A3BEFDAD7B2F3CF1C1E9676EFF2D8CC0757C6C7DD38313CE4FA41DA5EA7235D72969B977FA11EEBFF7EFB7FFFE6C9017BD77FF48E7B3772A2554B86BFD33ECD8D2300FB8702E4FC113264DB46F200836C514831F45D41B637900CBDD5436FF7D0C89105D82745CE7880932F80EC538C93EE550CEE5388DF71E74AD5DF5E5FD3CFDE47C5DF61B8AA9FFD1846908BB75AA0A3D2BB3CAB33D76728AB28EE1C13CFD14A9ED6413A412E99FAC571486DAED7E7EFB4268EF11FA6973DF786CA1C2F5072B34CD076155729053B21A500FBBDEFF2BC9A9FBD889D11FEABF99224B2667BEA589BFDDCA12A0BF153436F2B798ABDDFB80E8DF61DA2E46C215272B35236AA48BB49CE6A0E9EABA6CF5E92BAAB6E01E8E645BD50F4B25699EA6EA5A4F9DAD9624E6AA81159CBA90539EDE036663F2375CEE0D95AFAFC23FE0D5237903E510E70586DDC9CF304DBE7F26A3E2A4BB667B6E6208D08EF839C46C98BC1737E82C1FA97D47EB8F664E2BA433DCAE720A97795C3DC235F9DE3A997B8E8E35A1EAF870E705A725F925A9E3E5FB7515A3F92DA09DBC42A4B24CF1F22E7149523BD5F9D8D306B2BF060E31A5E27D67F9F4147413F99675F9DAB22B529FE3D62035EFB21F5C8E90705EB4B914A8C6FE22BDD7B4DE9740EAE41753F9BB187D7B30419EEA8A1E76CB3BD7560BABB96FE1D3E5E63B1ABD290EA5CEF3E3287A927CC487BA5116E5B29F0BDB8E336B72C7191784DD95D7E6D1608AAD241509E0AF81AE897CC07BDDC28606584BFD4CF8B5DE17466C36F7A8B3F0B7D7D0C6D7BAB3F31AFCF1D6EF155DB23D1C94E109FEAA23575A24193F30EE40C0C1BAF7759F9714CABF65235B39E656F5CABB99FE9ED4DFFF9188ABE730802EEEE079F5B3BC101CF7F4567F600AB71E179419DE4AD7B0F3E477B74E29FFDE78714EA3A64A21B30B7FF2C78DCDD0736A7D73C31EA289CF64EE721DACB62126E9D5F53FAE4FEF5E817577EF0FFB16F836143CE12ABDEF277CAFDCE5B5A6C499B70F3CC470977CFD3F9DA616F9B09BF3AEBBF748BE7AA32320F0681AB57A2C4FF19F6613C183E70DF738C971E3232FF07AB1EBE25] Point(doPlaceInTaskBar) Point(onClose) link(onCreate,3667046:doEvent1,[]) } Add(LineBreakEx,12702891,889,203) { Caption="old" Type=2 } Add(InfoTip,6457482,532,119) { Info=#26:Проверка на существование |17:переданного файла| Width=330 Height=193 } Add(Label,14355720,21,301) { Left=10 Top=10 Width=51 Height=17 Font=[MS Sans Serif,8,1,0,1] Caption="Проект:" } Add(Label,1432533,889,238) { Left=65 Top=10 Width=176 Height=17 Caption="Файл для запуска не указан!" link(Text,12702891:getVar,[]) } Add(Application,4627526,350,168) { } Add(ArrayRW,674651,357,217) { Index=Integer(0) link(onRead,7029895:doWork2,[]) link(Array,4627526:Params,[]) } Add(FileTools,6107905,553,196) { link(onEnd,8296051:doEvent,[]) link(FileName,7687892:getVar,[]) } Add(IndexToChanel,8296051,623,196) { link(onEvent1,758451:doWork,[]) link(onEvent2,440353:doEvent1,[(671,209)(671,244)]) } Add(Hub,440353,693,238) { link(onEvent1,1432533:doText,[]) link(onEvent2,11263820:doData,[]) } Add(Dir,4212597,301,168) { } Add(DoData,3575993,245,168) { link(onEventData,4212597:doCurrentDir,[(289,174)(289,181)]) link(Data,4212597:CurrentDir,[(251,156)(285,156)(285,211)(307,211)]) } Add(InfoTip,11304338,105,518) { Info=#56:Загрузка списка виртуальных устройств и запуск эмулятора| Width=176 Height=116 } Add(Hub,3667046,182,210) { OutCount=4 link(onEvent1,10501311:doWork,[]) link(onEvent2,3575993:doData,[(220,223)(220,174)]) link(onEvent3,674651:doRead,[(276,230)(276,223)]) } Add(LineBreakEx,7687892,553,161) { Caption="old" Type=2 } Add(LineBreakEx,14064077,448,273) { Caption="old" Type=3 link(_Data,11343212:Value,[]) } Add(InfoTip,9844055,77,7) { Info=#16:Запуск эмулятора|7:ANDROID| Font=[MS Sans Serif,10,1,0,1] Width=281 Height=60 } Add(ChildGroupBox,2011158,217,567) { } BEGIN_SDK Add(EditMulti,12955385,21,21) { WorkCount=1 Width=895 Height=536 link(doWork1,8009109:doEvent1,[(81,27)(81,153)]) } Add(GroupBox,13538456,35,406) { Left=10 Top=35 Width=207 Height=187 Font=[MS Sans Serif,8,1,0,1] Caption="1) Выберите эмулятор:" } Add(ListBox,2723447,455,147) { Left=30 Top=25 Width=150 Point(String) Point(onSelect) } Add(Button,8654158,427,259) { Left=30 Top=120 Width=150 Height=30 Caption="Запустить" Data=Integer(0) link(onClick,2360100:doCompare,[]) } Add(FileSearch,7308239,210,147) { Ext="*.ini" SubDir=1 FullName=1 link(onSearch,6196361:doPart,[]) } Add(InlineCode,13151070,154,147) { @Hint=#61:Компонент позволяет развернуть переменные окружения в строке.|69:Например: %WINDIR%\explorer.exe превратится в c:\windows\explorer.exe| WorkPoints=#8:doExpand| EventPoints=#8:onResult| DataPoints=#3:Str| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|19: Str: THI_Event;|24: onResult: THI_Event;|52: procedure doExpand(var _Data:TData; Index:word);|0:|5: end;|0:|14:implementation|0:|0:|31:procedure THiAsmClass.doExpand;|13:var Sz:Dword;|15: Src:string;|15: Dst:string;|5:begin|34: Src:=ReadString(_Data, Str,'');|50: Sz:=ExpandEnvironmentStrings(PChar(Src),nil,0);|22: SetLength(Dst, Sz);|56: ExpandEnvironmentStrings(PChar(Src), PChar(Dst), Sz);|42: SetLength(Dst, StrLen(PAnsiChar(Dst)));|20: //Dst[Sz-1]:=#0; |19: //_debug(Dst); |33: _hi_OnEvent(onResult, Dst); |4:end;|0:|4:end.| link(onResult,7308239:doSearch,[]) link(Str,13284369:Value,[]) } Add(Memory,13284369,154,105) { Default=String(%USERPROFILE%\\.android\\avd) } Add(FilePartElm,6196361,259,147) { Mode=2 link(onPart,4147192:doWork2,[]) } Add(FormatStr,14253456,476,448) { Mask="-avd %1 %2" link(onFString,13026998:doExec,[]) link(Str1,2360100:Var2,[]) link(Str2,13407560:State,[(489,390)(678,390)]) } Add(WinExec,13026998,539,448) { FileName="tools\\emulator.exe" Point(doConsoleExec) } Add(Hub,8009109,91,147) { link(onEvent1,13151070:doExpand,[]) link(onEvent2,4577011:doExistsValue,[(124,160)(124,293)]) } Add(HubEx,4147192,315,147) { link(onEvent,2723447:doAdd,[]) } Add(MultiElementEx,2360100,476,259) { @Hint=#10:BlueStacks| link(onFalse,14253456:doString,[(520,265)(520,314)(464,314)(464,454)]) link(Data,2723447:String,[]) AddHint(51,-25,69,13,@Hint) } BEGIN_SDK Add(EditMultiEx,12375838,21,21) { WorkCount=#9:doCompare| EventCount=#7:onFalse| VarCount=#4:Var2| DataCount=#4:Data| Width=517 link(doCompare,13998200:doCompare,[(35,27)(35,90)]) link(Var2,5539327:Var2,[(27,139)(97,139)]) } Add(If_else,13998200,49,84) { @Hint=#28:Проверка на выбор BlueStacks| Op1=String(BlueStacks) link(onTrue,9652265:doRead,[(145,90)(145,48)]) link(onFalse,12375838:onFalse,[(492,97)(492,27)]) link(Op2,5539327:Var1,[(62,54)]) AddHint(4,75,172,13,@Hint) } Add(GetDataEx,5539327,91,49) { link(Data,12375838:Data,[(97,35)(27,35)]) } Add(Registry,9652265,210,42) { @Hint=#30:Читаем путь к папке BlueStacks| HKey=2 Key="SOFTWARE\BlueStacks" Value="InstallDir" NotEmpty=1 link(onRead,1690861:doTrim,[]) AddHint(-39,70,178,13,@Hint) } Add(Trim,1690861,266,42) { Char="\" Mode=2 link(onTrim,5803461:doStrCat,[]) } Add(StrCat,5803461,322,42) { Str2="\HD-StartLauncher.exe" link(onStrCat,15675157:doExec,[]) } Add(WinExec,15675157,385,42) { } END_SDK Add(CheckBox,8861828,560,329) { Left=30 Top=160 Width=150 Hint="Запустить эмулятор с поддержкой GPU ускорения. Функция экспериментальная, поэтому может работать некорректно." Caption="GPU acceleration" link(onCheck,12990577:doEvent,[]) } Add(Switch,13407560,672,322) { DataOn=String(-gpu on) DataOff=String() Point(doOn) Point(State) } Add(IndexToChanel,12990577,616,329) { link(onEvent1,13407560:doReset,[]) link(onEvent2,13407560:doOn,[]) } Add(InfoTip,6579903,546,301) { Info=#16:GPU acceleration| Width=176 Height=74 } Add(Registry,4577011,168,273) { HKey=2 Key="SOFTWARE\BlueStacks" Value="InstallDir" NotEmpty=1 Point(doExistsValue) Point(onExistsValue) link(onExistsValue,476959:doEvent,[]) } Add(IndexToChanel,476959,217,280) { Data=String(BlueStacks) link(onEvent2,4147192:doWork3,[(319,293)]) } Add(InfoTip,5175045,133,70) { Info=#21:Перебор доступных AVD|28:в %userprofile%\.android\avd| Width=176 Height=123 } Add(InfoTip,11441577,133,224) { Info=#30:Проверка на наличие BlueStacks|21:и добавление в список| Width=176 Height=123 } Add(InfoTip,397732,441,420) { Info=#19:Запуск обычного AVD| HAlign=2 Width=176 Height=81 } END_SDK Add(ChildGroupBox,16468327,399,581) { link(Data1,6096484:getVar,[]) } BEGIN_SDK Add(EditMulti,9208103,7,28) { WorkCount=1 DataCount=1 Width=846 Height=508 VOffset=140 HOffset=105 link(doWork1,15865215:doEnabled,[(56,174)(56,188)]) } Add(GroupBox,16242362,35,378) { Left=240 Top=35 Width=207 Height=187 Font=[MS Sans Serif,8,1,0,1] Caption="2) Установите приложение:" } Add(Button,15865215,105,182) { Left=30 Top=70 Width=150 Height=30 Enabled=1 Caption="Установить" Data=Integer(0) Point(doEnabled) link(onClick,4173187:doEvent1,[]) } Add(Edit,9079454,546,112) { Left=135 Top=25 Text="5554" } Add(Label,15329598,35,336) { Left=20 Top=20 Width=114 Height=32 Caption="Номер запущенного эмулятора:" AutoSize=1 } Add(WinExec,8945808,616,189) { FileName="platform-tools\\adb.exe" RunEvent=1 } Add(FormatStr,7493520,546,189) { Mask=" install "temp\\temp.apk"" link(onFString,8945808:doExec,[]) link(Str1,15595032:Var2,[]) } Add(GetDataEx,15595032,546,161) { link(Data,9079454:Text,[]) } Add(LineBreakEx,3147916,231,231) { Caption="new" Type=3 link(_Data,15353367:Var1,[]) } Add(LineBreakEx,13394824,231,154) { Caption="old" Type=2 } Add(MultiElement,15353367,231,182) { link(onEvent1,7273132:doEvent1,[]) link(Data1,13394824:getVar,[]) } BEGIN_SDK Add(EditMulti,2736915,21,21) { EventCount=1 WorkCount=1 DataCount=1 VarCount=1 Width=608 Height=536 VOffset=42 HOffset=42 link(doWork1,8724615:doSearch,[(35,69)(35,188)]) link(Var1,521521:getVar,[]) } Add(LineBreakEx,15613977,63,35) { Caption="old" Type=3 link(_Data,2736915:Data1,[]) } Add(FileTools,6325264,399,196) { link(onEnd,2736915:onEvent1,[(581,202)(581,69)]) link(FileName,11158272:getVar,[]) link(NewFileName,9029499:Value,[]) } Add(LineBreakEx,11158272,399,126) { Caption="old" Type=2 } Add(InfoTip,6052736,287,84) { Info=#8:Копируем|40:%source%\%filename%.apk в temp\temp.apk | Width=260 Height=165 } Add(FileSearch,8724615,91,182) { Ext="*.apk" Dir="temp" SubDir=1 link(onSearch,4488763:doDelete,[]) link(onEndSearch,6325264:doCopy,[(144,195)(144,209)(303,209)(303,209)]) } Add(FileTools,4488763,182,168) { DelToRecycle=1 } Add(InfoTip,12532134,77,112) { Info=#23:Удаляем все файлы *.apk|15:из папки temp\ | Width=176 Height=137 } Add(LineBreakEx,521521,63,511) { Caption="new" Type=2 } Add(LineBreakEx,15147164,322,364) { Caption="old" Type=2 } Add(FileTools,9463932,504,392) { link(FileName,6984329:getVar,[]) } Add(StrCat,5615120,434,399) { Str1="temp\" link(onStrCat,9463932:doCopy,[]) } Add(FilePartElm,11874550,322,399) { link(onPart,12128759:doValue,[]) link(FileName,15147164:getVar,[]) } Add(LineBreakEx,6984329,504,364) { Caption="old" Type=2 } Add(InfoTip,10676683,308,315) { Info=#8:Копируем|46:%source%\%filename%.apk в temp\%filename%.apk | Width=260 Height=165 } Add(LineBreakEx,11492103,378,448) { Caption="new" Type=3 link(_Data,12128759:Value,[]) } Add(Memory,12128759,378,399) { Default=String() link(onData,5615120:doStrCat,[]) } Add(Memory,9029499,406,147) { Default=String(temp\\temp.apk) } END_SDK Add(InfoTip,15950121,154,84) { Info=#26:Копирование файлов *.apk |34:в папку temp\ потому, что эмулятор|32:не может запускать файлы, в пути|29:к которым есть русские буквы | Width=211 Height=186 } Add(LineBreakEx,14001435,112,49) { Caption="old" Type=3 link(_Data,9208103:Data1,[]) } Add(Button,12603513,350,371) { Left=30 Top=150 Width=150 Height=25 Caption="Деинсталлировать" link(onClick,13075612:doEvent2,[]) } Add(WinExec,12524676,588,364) { FileName="platform-tools\\adb.exe" RunEvent=1 } Add(FormatStr,9849945,518,364) { Mask=" uninstall %2" Point(FString) link(onFString,12524676:doExec,[]) link(Str1,15595032:Var1,[(524,166)]) link(Str2,9665390:Text,[]) } Add(Edit,9665390,525,308) { Left=15 Top=120 Width=175 Hint="Внутреннее название приложения для удаления" Text="hiasm.hiasmproject" } Add(Hub,7273132,378,182) { link(onEvent1,13075612:doEvent1,[(420,188)(420,370)]) link(onEvent2,7493520:doString,[]) } Add(Hub,13075612,448,364) { InCount=2 OutCount=1 link(onEvent1,9849945:doString,[]) } Add(InfoTip,506815,504,84) { Info=#9:Установка| Width=162 Height=165 } Add(InfoTip,5520048,483,273) { Info=#8:Удаление| Width=162 Height=158 } Add(WinExec,15828492,210,301) { Param="kill-server" FileName="platform-tools\\adb.exe" Mode=0 Point(doConsoleExec) AddHint(-17,42,59,13,Param) } Add(Hub,4173187,161,182) { link(onEvent1,15353367:doWork1,[]) link(onEvent2,15828492:doExec,[(179,195)(179,307)]) } END_SDK Add(LineBreakEx,11942768,119,567) { Caption="init" Type=1 link(OnEvent,1328493:doEvent1,[]) } Add(InfoTip,14689810,301,518) { Info=#43:Установка приложения на ЗАПУЩЕННЫЙ эмулятор| Width=176 Height=116 } Add(LineBreakEx,6096484,399,553) { Caption="old" Type=2 } Add(LineBreakEx,758451,770,196) { Caption="disable" } Add(LineBreakEx,10501311,231,210) { Caption="init" } Add(Memory,11343212,448,217) { link(onData,6107905:doFileExists,[]) } Add(DropFile,10707601,357,259) { link(onDropFile,7029895:doWork3,[(410,265)]) } Add(HubEx,7029895,406,217) { link(onEvent,11343212:doValue,[]) } Add(LineBreakEx,6466564,777,245) { Caption="disable" } Add(DoData,11263820,728,245) { Data=Integer(1) link(onEventData,6466564:doWork,[]) } Add(LineBreakEx,7118871,301,581) { Caption="disable" Type=1 link(OnEvent,12453169:doEvent1,[]) } Add(ChildGroupBox,8425417,651,588) { link(Data1,14955061:getVar,[]) } BEGIN_SDK Add(EditMulti,1199884,7,28) { WorkCount=2 DataCount=1 Width=846 Height=508 VOffset=140 HOffset=105 link(doWork1,10943519:doEvent1,[(56,174)(56,188)]) link(doWork2,13649641:doEvent1,[]) } Add(GroupBox,5658346,35,378) { Left=10 Top=235 Width=437 Height=119 Font=[MS Sans Serif,8,1,0,1] Caption="3) Установите приложение на Memu:" } Add(Button,1209717,266,189) { Left=30 Top=85 Width=70 Height=25 Enabled=1 Caption="Установить" Data=Integer(0) Point(doEnabled) link(onClick,15061656:doWork2,[]) } Add(Edit,14529071,546,112) { Left=125 Top=30 Width=305 Text="" } Add(Label,2172391,37,322) { Left=4 Top=33 Width=114 Height=12 Caption="Путь к папке Memu:" AutoSize=1 } Add(WinExec,10816739,616,189) { RunEvent=1 link(FileName,9507813:Var3,[(622,155)]) link(Params,1660355:FString,[(629,177)(591,177)(591,233)(552,233)]) } Add(FormatStr,1660355,546,189) { Mask=" install -r "temp\\temp.apk"" Point(FString) link(onFString,10816739:doExec,[]) link(Str1,7630819:Var2,[]) } Add(GetDataEx,7630819,546,161) { link(Data,14529071:Text,[]) } Add(LineBreakEx,6383450,196,224) { Caption="new" Type=3 link(_Data,4686037:Var1,[]) } Add(LineBreakEx,10147025,196,154) { Caption="old" Type=2 } Add(MultiElement,4686037,196,182) { link(Data1,10147025:getVar,[]) } BEGIN_SDK Add(EditMulti,16320528,21,21) { EventCount=1 WorkCount=1 DataCount=1 VarCount=1 Width=608 Height=536 VOffset=42 HOffset=42 link(doWork1,11479096:doSearch,[(35,69)(35,188)]) link(Var1,2938422:getVar,[]) } Add(LineBreakEx,8267278,63,35) { Caption="old" Type=3 link(_Data,16320528:Data1,[]) } Add(FileTools,6863737,399,196) { link(onEnd,16320528:onEvent1,[(581,202)(581,69)]) link(FileName,15365077:getVar,[]) link(NewFileName,5947415:Value,[]) } Add(LineBreakEx,15365077,399,126) { Caption="old" Type=2 } Add(InfoTip,663541,287,84) { Info=#8:Копируем|40:%source%\%filename%.apk в temp\temp.apk | Width=260 Height=165 } Add(FileSearch,11479096,91,182) { Ext="*.apk" Dir="temp" SubDir=1 link(onSearch,11156411:doDelete,[]) link(onEndSearch,6863737:doCopy,[(144,195)(144,209)]) } Add(FileTools,11156411,182,168) { DelToRecycle=1 } Add(InfoTip,12451916,77,112) { Info=#23:Удаляем все файлы *.apk|15:из папки temp\ | Width=176 Height=137 } Add(LineBreakEx,2938422,63,511) { Caption="new" Type=2 } Add(LineBreakEx,12144426,322,364) { Caption="old" Type=2 } Add(FileTools,6468837,504,392) { link(FileName,1128193:getVar,[]) } Add(StrCat,8826449,434,399) { Str1="temp\" link(onStrCat,6468837:doCopy,[]) } Add(FilePartElm,14191933,322,399) { link(onPart,15224504:doValue,[]) link(FileName,12144426:getVar,[]) } Add(LineBreakEx,1128193,504,364) { Caption="old" Type=2 } Add(InfoTip,3646341,308,315) { Info=#8:Копируем|46:%source%\%filename%.apk в temp\%filename%.apk | Width=260 Height=165 } Add(LineBreakEx,1580192,378,448) { Caption="new" Type=3 link(_Data,15224504:Value,[]) } Add(Memory,15224504,378,399) { Default=String() link(onData,8826449:doStrCat,[]) } Add(Memory,5947415,406,147) { Default=String(temp\\temp.apk) } END_SDK Add(InfoTip,15456614,154,63) { Info=#26:Копирование файлов *.apk |34:в папку temp\ потому, что эмулятор|32:не может запускать файлы, в пути|29:к которым есть русские буквы | Width=211 Height=186 } Add(LineBreakEx,13472821,112,49) { Caption="old" Type=3 link(_Data,1199884:Data1,[]) } Add(Button,10909586,350,371) { Left=309 Top=85 Width=120 Height=25 Caption="Деинсталлировать" link(onClick,12383413:doEvent2,[]) } Add(WinExec,5466890,588,364) { RunEvent=1 link(FileName,9507813:Var2,[]) link(Params,6506900:FString,[(601,352)(563,352)(563,408)(524,408)]) } Add(FormatStr,6506900,518,364) { Mask=" uninstall %2" Point(FString) link(onFString,5466890:doExec,[]) link(Str1,7630819:Var1,[(524,166)]) link(Str2,13435980:Text,[]) } Add(Edit,13435980,525,308) { Left=295 Top=55 Width=135 Hint="Внутреннее название приложения для удаления" Text="hiasm.hiasmproject" } Add(Hub,762872,378,189) { OutCount=3 link(onEvent2,12383413:doEvent1,[(420,202)(420,370)]) link(onEvent3,1660355:doString,[(469,209)(469,195)]) } Add(Hub,12383413,448,364) { InCount=2 OutCount=1 link(onEvent1,6506900:doString,[]) } Add(InfoTip,11015260,504,84) { Info=#9:Установка| Width=162 Height=165 } Add(InfoTip,5258850,483,273) { Info=#8:Удаление| Width=162 Height=158 } Add(EnvVars,15467680,399,112) { String="%MEmu_Path%" link(onExpand,11845673:doStrCat,[]) } Add(StrCat,11845673,448,112) { Str2="\\memu\\adb.exe" link(onStrCat,14529071:doText,[]) } Add(GetDataEx,9507813,588,150) { Angle=3 link(Data,11845673:Result,[(454,155)]) } Add(CheckBox,11828085,217,294) { Left=10 Top=57 Width=105 Caption="Автоустановка" link(onCheck,3664316:doWrite,[(266,300)(266,340)(107,340)(107,307)]) } Add(Ini,3664316,119,294) { FileName="opt_launcher" Section="Memu" Key="Autoinstall" link(onResult,11828085:doCheck,[]) } Add(Hub,13649641,14,175) { link(onEvent1,15467680:doExpand,[(48,181)(48,118)]) link(onEvent2,3664316:doRead,[(45,188)(45,300)]) } Add(If_else,7464964,217,371) { Op2=Integer(1) link(onTrue,15061656:doWork3,[(326,377)]) link(Op1,11828085:Checked,[]) } Add(Hub,10943519,70,182) { OutCount=3 link(onEvent1,4686037:doWork1,[]) link(onEvent2,1209717:doEnabled,[]) link(onEvent3,15443106:doData,[(130,202)(130,377)]) } Add(DoData,15443106,175,371) { link(onEventData,7464964:doCompare,[]) } Add(HubEx,15061656,322,189) { link(onEvent,762872:doEvent1,[]) } END_SDK Add(InfoTip,1891157,553,525) { Info=#39:Установка приложения на ЗАПУЩЕННЫЙ Memu| Width=176 Height=116 } Add(LineBreakEx,14955061,651,560) { Caption="old" Type=2 } Add(Hub,12453169,364,581) { link(onEvent1,16468327:doWork1,[]) link(onEvent2,8425417:doWork1,[]) } Add(Hub,1328493,175,567) { link(onEvent1,2011158:doWork1,[]) link(onEvent2,8425417:doWork2,[(201,580)(201,601)]) }
Редактировалось 5 раз(а), последний 2017-04-11 12:25:16
|