我正在开发一个在包括Android在内的许多平台上都支持的库。这个库是用Google基础设施进行单元测试的。我目前正在使用Visual 2015的跨平台特性来构建、部署和调试。测试套件变得相当大,运行整个过程需要一段时间。使用Google基础设施,可以传递命令行参数来筛选出要运行的测试(-gtest_ filter .)。对于诸如Windows、PS4和XboxOne这样的平台,通过在Properties >Configuration-> Debugging -> Command参数中设置Visual,这是很容易实现的。但是,对于跨平台开发项目和包(AndroidProj),这个调试器属性似乎不存在。这是安卓本机活动项目属性的快照。
我知道Visual扩展提供了类似于我正在寻找的特性,如这里所示,但这不是一个可行的选择,因为我想避免支付扩展许可。
我如何向Android调试器提供命令行参数,就像为本地Windows调试器提供命令行参数一样?
发布于 2017-05-10 17:22:00
我的一个同事在我贴出这个问题后不久就找到了答案。这是我们解决问题的方法。
在VS2015中,在Android跨平台包/应用程序项目(Androidproj)的属性页面中,更确切地说,在调试选项卡中,有启动活动字段。此字段可用于传递命令行意图参数。在安装包后启动调试器时,它将执行以下命令:
com.YourPackageName/TheContentOfLaunchActivityField. adb.exe am start -D -n
默认情况下,在启动活动字段中指定了启动程序活动(android.app.NativeActivity),但是您可以提供进一步的意图参数。它们的列表可以在以下文档中找到:https://developer.android.com/studio/command-line/adb.html#IntentSpec。
在我们的情况下,我们需要向应用程序提供字符串数据(例如:-gtest_filter=.),所以我们使用了意图参数-e extra_key extra_value。
在我们的主要函数中,我们可以使用下面的代码和一些解析来检索额外的值(未显示)。它使用JNI ()。
JNIEnv* env = NULL;
state->activity->vm->AttachCurrentThread(&env, 0);
Private::JNIObjRef nativeActivityObject(env, state->activity->clazz);
jclass nativeActivityClass = env->GetObjectClass(nativeActivityObject.Get());
jmethodID getIntentID = env->GetMethodID(nativeActivityClass, "getIntent", "()Landroid/content/Intent;");
Private::JNIObjRef intentObject(env, env->CallObjectMethod(nativeActivityObject.Get(), getIntentID));
jclass intentClass = env->FindClass("android/content/Intent");
jmethodID getExtrasID = env->GetMethodID(intentClass, "getExtras", "()Landroid/os/Bundle;");
Private::JNIObjRef extrasObject(env, env->CallObjectMethod(intentObject.Get(), getExtrasID)); https://stackoverflow.com/questions/35511049
复制相似问题