2011-12-22 75 views
1

我想從另一個Java應用程序創建我的Android虛擬設備。 我不想使用默認的Android AvdManager,因爲您無法設置您想要創建AVD的位置,並且它具有異國情調的caraters問題。從Java應用程序創建一個Android虛擬設備編程

所以我得到了AvdMagager的sdklib.jar並嘗試這樣做。

但因爲我有我的日誌不能創建一個AVD:
錯誤
無法找到ABI%2 $ s創建「%1 $ s」的文件複製到文件夾AVD。

這是我做的一個爲例:

class Choice implements ISdkLog { 

    public Choice() { 
    com.android.sdklib.internal.avd.AvdManager avdmanager; 
    try { 
     com.android.sdklib.SdkManager manager = com.android.sdklib.SdkManager.createManager("Boulet", this); 
     IAndroidTarget[] targets = manager.getTargets(); 

     avdmanager= new com.android.sdklib.internal.avd.AvdManager(manager,this); 

     avdmanager.createAvd(new java.io.File("filename"), "dunno", targets[0], "dunno", "dunno", "dunno", null, false, false, false, this); 

    } catch (AndroidLocationException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    } 
//Method of interface ISdkLog 
@Override 
public void error(Throwable arg0, String arg1, Object... arg2) { 
    // TODO Auto-generated method stub 
    System.out.println("Error"); 
    System.out.println(arg1); 
    System.out.println(arg0); 
} 

@Override 
public void printf(String arg0, Object... arg1) { 
    // TODO Auto-generated method stub 
    System.out.println("Log"); 
    System.out.println(arg0); 
} 

@Override 
public void warning(String arg0, Object... arg1) { 
    // TODO Auto-generated method stub 
    System.out.println("Warning"); 
    System.out.println(arg0); 
} 
} 
+1

我猜一個簡單的命令行調用是簡單的吧?因爲你可以從命令行創建一個新的avd :) – WarrenFaith 2011-12-22 12:07:33

+0

同意,請使用文檔化的命令行界面。 – CommonsWare 2011-12-22 14:47:30

+0

新版Android工具中命令行的問題在於它等待用戶輸入(即使使用了--force參數)。所以Runtime.getRuntime()。exec命令被卡住了。 – Kowlown 2011-12-22 19:20:17

回答

1

此錯誤與系統映像。平臺必須使用。 我可以用這個在windows上創建我的avd。

AvdManager avdmanager; 
try { 
    SdkManager manager = SdkManager.createManager("path/to/android/sdk/folder", this); 
    IAndroidTarget[] targets = manager.getTargets(); 

    avdmanager= new AvdManager(manager,this); 

    avdmanager.createAvd(new File("custom/path/for/your/avd","advname"), "advname", targets[0], target[0].getSystemImages()[0].getAbiType(), null, null, null, 
      false, false, false, this); 

} catch (AndroidLocationException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 

null參數是皮膚,SD卡路徑,模擬器參數(屏幕參數等)的選項。

+0

SdkManager包含在哪個庫中? – droidev 2014-03-27 07:30:01

+1

這是相當古老的,所以這段代碼可能不再是最新的。該類位於sdk \ tools \ lib \ sdklib.jar中 – Kowlown 2014-03-31 12:32:14

相關問題