@@ -7,9 +7,28 @@ const EMULATOR = resolve(ANDROID_HOME, "emulator", "emulator");
77const ADB = resolve ( ANDROID_HOME , "platform-tools" , "adb" ) ;
88
99export class EmulatorManager {
10- private static _emulators : Map < string , child_process . ChildProcess > = new Map ( ) ;
10+ private static _emulators : Map < string , EmulatorManager > = new Map ( ) ;
1111 private static _emulatorIds : Map < string , string > = new Map ( ) ;
1212
13+ constructor ( private _id , private _args , private _emulatorProc : child_process . ChildProcess , private _shouldKill ) {
14+ }
15+
16+ get id ( ) {
17+ return this . _id ;
18+ }
19+
20+ get emulatorProc ( ) {
21+ return this . _emulatorProc ;
22+ }
23+
24+ get args ( ) {
25+ return this . _args ;
26+ }
27+
28+ get shouldKill ( ) {
29+ return this . _shouldKill ;
30+ }
31+
1332 public static async startEmulator ( args : INsCapabilities ) {
1433 if ( ! args . appiumCaps . avd || args . appiumCaps . avd === "" ) {
1534 log ( "No avd name provided! We will not start the emulator!" , args . verbose ) ;
@@ -26,11 +45,10 @@ export class EmulatorManager {
2645 detached : false
2746 } ) ;
2847
29- const responce : boolean = await waitForOutput ( emulator , new RegExp ( args . appiumCaps . avd , "i" ) , / E r r o r / , args . appiumCaps . lt || 180000 , args . verbose ) ;
30-
31- if ( responce ) {
48+ const responce : boolean = await waitForOutput ( emulator , new RegExp ( args . appiumCaps . avd , "i" ) , new RegExp ( "Error" , "i" ) , args . appiumCaps . lt || 180000 , args . verbose ) ;
49+ if ( responce === true ) {
3250 EmulatorManager . waitUntilEmulatorBoot ( id , args . appiumCaps . lt || 180000 ) ;
33- EmulatorManager . _emulators . set ( args . runType , emulator ) ;
51+ EmulatorManager . _emulators . set ( args . runType , new EmulatorManager ( id , args , emulator , true ) ) ;
3452 } else {
3553 log ( "Emulator is probably already started!" , args . verbose ) ;
3654 }
@@ -41,40 +59,43 @@ export class EmulatorManager {
4159 public static stop ( args : INsCapabilities ) {
4260 if ( EmulatorManager . _emulators . has ( args . runType ) ) {
4361
44- const emulator = EmulatorManager . _emulators . get ( args . runType ) ;
45- return new Promise ( ( resolve , reject ) => {
46- emulator . on ( "close" , ( code , signal ) => {
47- log ( `Emulator terminated due signal: ${ signal } and code: ${ code } ` , args . verbose ) ;
48- resolve ( ) ;
49- } ) ;
50-
51- emulator . on ( "exit" , ( code , signal ) => {
52- log ( `Emulator terminated due signal: ${ signal } and code: ${ code } ` , args . verbose ) ;
53- resolve ( ) ;
54- } ) ;
55-
56- emulator . on ( "error" , ( code , signal ) => {
57- log ( `Emulator terminated due signal: ${ signal } and code: ${ code } ` , args . verbose ) ;
58- resolve ( ) ;
59- } ) ;
60-
61- emulator . on ( "disconnect" , ( code , signal ) => {
62- log ( `Emulator terminated due signal: ${ signal } and code: ${ code } ` , args . verbose ) ;
63- resolve ( ) ;
64- } ) ;
65-
66- try {
67- if ( isWin ) {
68- shutdown ( emulator , args . verbose ) ;
69- } else {
70- shutdown ( emulator , args . verbose ) ;
71- emulator . kill ( "SIGINT" ) ;
72- //this._emulator.kill("SIGKILL");
73- }
74- } catch ( error ) {
75- console . log ( error ) ;
76- }
77- } ) ;
62+ const emu = EmulatorManager . _emulators . get ( args . runType ) ;
63+ executeCommand ( ADB + " -s emulator-" + emu . id + " emu kill" ) ;
64+
65+ // return new Promise((resolve, reject) => {
66+ // emu.emulatorProc.on("close", (code, signal) => {
67+ // log(`Emulator terminated due signal: ${signal} and code: ${code}`, args.verbose);
68+ // resolve();
69+ // });
70+
71+ // emu.emulatorProc.on("exit", (code, signal) => {
72+ // log(`Emulator terminated due signal: ${signal} and code: ${code}`, args.verbose);
73+ // resolve();
74+ // });
75+
76+ // emu.emulatorProc.on("error", (code, signal) => {
77+ // log(`Emulator terminated due signal: ${signal} and code: ${code}`, args.verbose);
78+ // resolve();
79+ // });
80+
81+ // emu.emulatorProc.on("disconnect", (code, signal) => {
82+ // log(`Emulator terminated due signal: ${signal} and code: ${code}`, args.verbose);
83+ // resolve();
84+ // });
85+
86+ // try {
87+ // if (isWin) {
88+ // shutdown(emu.emulatorProc, args.verbose);
89+ // } else {
90+ // executeCommand(ADB + " -s emulator-" + emu.id + " emu kill");
91+ // shutdown(emu.emulatorProc, args.verbose);
92+ // emu.emulatorProc.kill("SIGINT");
93+ // //this._emulator.kill("SIGKILL");
94+ // }
95+ // } catch (error) {
96+ // console.log(error);
97+ // }
98+ // });
7899 }
79100
80101 }
@@ -104,22 +125,28 @@ export class EmulatorManager {
104125 * @param deviceId
105126 */
106127 private static checkIfEmulatorIsRunning ( deviceId ) {
107- let hasBooted = false ;
108-
109- let rowData = executeCommand ( ADB + " -s " + deviceId + " shell dumpsys activity" ) ;
110- let list = rowData . split ( "\\r\\n" ) ;
111-
112- list . forEach ( line => {
113- if ( line . includes ( "Recent #0" )
114- && ( line . includes ( "com.android.launcher" )
115- || line . includes ( "com.google.android.googlequicksearchbox" )
116- || line . includes ( "com.google.android.apps.nexuslauncher" )
117- || line . includes ( deviceId ) ) ) {
118- hasBooted = true ;
119- }
120- } ) ;
128+ let isBooted = executeCommand ( ADB + " -s " + deviceId + " shell getprop sys.boot_completed" ) . trim ( ) === "1" ;
129+ if ( isBooted ) {
130+ isBooted = executeCommand ( ADB + " -s " + deviceId + " shell getprop init.svc.bootanim" ) . toLowerCase ( ) . trim ( ) === "stopped" ;
131+ }
132+
133+ return isBooted ;
134+
135+ // let hasBooted = false;
136+ // let rowData = executeCommand(ADB + " -s " + deviceId + " shell dumpsys activity");
137+ // let list = rowData.split("\\r\\n");
138+
139+ // list.forEach(line => {
140+ // if (line.includes("Recent #0")
141+ // && (line.includes("com.android.launcher")
142+ // || line.includes("com.google.android.googlequicksearchbox")
143+ // || line.includes("com.google.android.apps.nexuslauncher")
144+ // || line.includes(deviceId))) {
145+ // hasBooted = true;
146+ // }
147+ // });
121148
122- return hasBooted ;
149+ // return hasBooted;
123150 }
124151
125152 public static emulatorId ( platformVersion ) {
0 commit comments