2013-07-30 67 views
0

我想從servlet運行/啓動AVD。 我有一個類,如何從servlet運行android AVD

class A extends ActivityInstrumentationTestCase2{ 

    // all the relevant function for launching the ADV and execution of test steps in android app. 

} 

此類工作正常,當我作爲Android的JUnit測試運行。但我想從servlet調用/運行這個類。

我愛:我有一個servlet,

B extends HttpServlet { 

    doPost() { 
     A obj = new A(); 
     obj.somemethod() which launch the ADV or open the application. 
    } 
} 

但是,當我從servlet EXCUTE它我得到例外

java.lang.NoClassDefFoundError: android/test/ActivityInstrumentationTestCase2 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClassCond(Unknown Source) 
java.lang.ClassLoader.defineClass(Unknown Source) 
java.security.SecureClassLoader.defineClass(Unknown Source) 
                         org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818) 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
com.web.evernote.ui.bean.ExecuteTestCases.doPost(ExecuteTestCases.java:83) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

可以在任何一個可以幫助我在這....

基本上我想運行adv,然後打開記事本這樣的活動並且想要執行測試....

回答

0

您可能需要使用ADB命令來啓動模擬器,在的someMethod()函數,你需要這樣的:

strCommand.append(ADB_PATH + "adb -s "+simulatorName+" shell am instrument ");; 
strCommand.append("-w "); 
strCommand.append(instrumentationPath); 
try 
{ 
    p = Runtime.getRuntime().exec(strCommand.toString()); 
    p.waitFor(); 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 

上面的例子啓動模擬器上進行測試的情況。 這裏strCommand是StringBuilder的一個實例。 ADB_PATH是存儲adb路徑的變量。你將不得不做的是改變命令來啓動模擬器。像這樣的東西

adb shell am start -a android.intent.action.MAIN -n org.sample.helloworld/org.sample.helloworld.HelloWorld。

+0

謝謝,其實我可以通過exec來運行ADV,正如你所提到的。但我在這之後得到問題...我的代碼是:try {launcherActivityClass = Class.forName(launch activity class name); catch(ClassNotFoundException e){ throw new RuntimeException(e); } – itin

+0

基本上我想運行adv,然後打開記事本等活動。 – itin

+0

要啓動設備,請使用emulator -avd emulator -5558命令,其中emulator-5558是AVD的名稱。 – Ritesh