以编程方式从Java应用程序创建Android虚拟设备

以编程方式从Java应用程序创建Android虚拟设备,java,android,sdk,Java,Android,Sdk,我想从另一个java应用程序创建我的Android虚拟设备。 我不想使用默认的Android AvdManager,因为您无法设置要创建AVD的位置,而且它有异国情调的caraters问题 所以我得到了avdmagger的sdklib.jar并尝试这样做 但我无法创建AVD,因为我有日志: 错误 找不到ABI%2$s要复制到AVD文件夹中的“%1$s”文件 这是我所做工作的一个例子: class Choice implements ISdkLog { public Choice() {

我想从另一个java应用程序创建我的Android虚拟设备。 我不想使用默认的Android AvdManager,因为您无法设置要创建AVD的位置,而且它有异国情调的caraters问题

所以我得到了avdmagger的sdklib.jar并尝试这样做

但我无法创建AVD,因为我有日志:
错误
找不到ABI%2$s要复制到AVD文件夹中的“%1$s”文件

这是我所做工作的一个例子:

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);
}
}

此错误与平台必须使用的系统映像有关。 我可以用这个在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();
}

空参数是皮肤、SD卡路径、仿真器参数(屏幕参数等)的选项。

此错误与平台必须使用的系统映像有关。 我可以用这个在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();
}

空参数是皮肤、SD卡路径、仿真器参数(屏幕参数等)的选项。

我想简单的命令行调用就是简单,对吗?因为您可以从命令行创建新的avd:)同意,请使用文档化的命令行界面。新版本的Android工具中,命令行的问题在于它等待用户输入(即使使用--force参数)。因此Runtime.getRuntime().exec命令被卡住了。我忘记了确切地说,为了方便起见,我想从Java应用程序创建它,就像Google使用AVDManager所做的那样。AVDManager非常棒,但您不能使用它设置自定义路径。当你想用参数和选项创建AVD时,命令行可能会很烦人。我想一个简单的命令行调用就是简单,对吧?因为您可以从命令行创建新的avd:)同意,请使用文档化的命令行界面。新版本的Android工具中,命令行的问题在于它等待用户输入(即使使用--force参数)。因此Runtime.getRuntime().exec命令被卡住了。我忘记了确切地说,为了方便起见,我想从Java应用程序创建它,就像Google使用AVDManager所做的那样。AVDManager非常棒,但您不能使用它设置自定义路径。当您想要创建包含参数和选项的AVD时,命令行可能会很烦人。SDKManager包含在哪个库中?它非常旧,因此这段代码可能不再是最新的。该类位于哪个库中包含的sdk\tools\lib\sdklib.jarSdkManager中?它非常旧,因此这段代码可能不再是最新的。该类位于sdk\tools\lib\sdklib.jar中