【问题标题】:Custom arguments/variables passed to Android emulator传递给 Android 模拟器的自定义参数/变量
【发布时间】:2011-10-17 15:22:45
【问题描述】:

我想向通过 Eclipse 启动的 android 模拟器传递一个参数。此参数是一个自定义参数,我将使用它来确定要连接的服务器地址是“localhost”还是“myserverdomain.com”。这是因为每当我在生产环境或本地测试环境中运行程序时,我都不想拥有同一个程序的两个二进制文件或两个版本。

在纯 Java 中,我可以使用命令行参数,并在 main() 中检索它们,或者也使用自定义环境变量并使用 System.getProperty() 检索它们。

我在 Android 中找不到任何类似的功能。请问有知道的吗?

【问题讨论】:

  • 您要查找的信息是您使用的是模拟器还是真实设备,还是设备的主机名?
  • 不,我需要传递我自己的变量

标签: java android environment-variables command-line-arguments


【解决方案1】:

这是可能的,虽然我没有尝试通过 Eclipse 来实现。

您可以从命令行使用adb 启动a shell 并使用参数运行应用程序。

例如,

adb shell am start -a android.intent.action.MAIN -n org.caoilte.MyActivity -e SOME_KEY some_value -e SOME_OTHER_KEY some_other_value

将以我可以从捆绑包中提取的额外内容开始我的活动,

public class MyActivity extends Activity {

protected void onStart() {
    super.onStart();


    String someKey = null;
    String someOtherKey = null;

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        jsEnv = extras.getString("SOME_KEY");
        serverEnv = extras.getString("SOME_OTHER_KEY");
    }
}

【讨论】:

    【解决方案2】:

    当您启动模拟器来调试您的应用时,就像在设备上安装一样。模拟器不仅仅是运行应用程序的机制,它几乎是一部手机。创建一个命令行选项以将数据传递到您的应用程序会有点复杂,因为没有main(String[]),并且它需要几个选项来确定您希望何时以及如何传递命令行选项。

    告诉应用运行哪个服务器可以通过几种不同的方式来完成。首先,您可以将其设置为String resource。其次,您可以使用Build.PRODUCT 和其他Build 值检测您正在运行的设备。还有一些使用NetworkInterface 的选项。此外,为什么要开发应用程序,您可以让用户决定使用 AlertDialogListPreference 并以 debugging 作为触发器。

    【讨论】:

    • 没有机制可以通过模拟器的命令行将模拟器命令行参数传递给应用程序或设置环境变量。
    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 2011-11-10
    • 1970-01-01
    • 2019-11-07
    • 2013-03-08
    • 2011-10-12
    • 2014-08-18
    • 2012-11-14
    相关资源
    最近更新 更多