1

(我是一名新的 Android 开发人员,所以我的术语可能是错误的。)

Android Studio 2.3.1 目标 API 22

我似乎有一个程序存在 Instant Run 允许的错误,但是当从例如电子邮件安装的内置 apk 运行时崩溃。情况是这样的:

我在 xml 中有一个带有 onClick 属性的按钮:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:onClick="myOnClick"
/>

在我的活动中,我有代码,我(错误地)在 myOnClick 上遗漏了所需的“公共”:

void myOnClick(View v)
{
    Button button = (Button)v;
    button.setText("clicked");
}

(是的,我确实收到了来自 Android Studio 的警告,说从未使用过 myOnClick。)

当我使用“运行”或“调试”按钮从 Android Studio 运行此程序时,程序“正常”运行,因为当我单击按钮时 myOnClick 会毫无怨言地执行。但它不应该工作,因为所需的签名是“public void myOnClick(View v)”。

此外,如果我执行“构建 APK”,然后将该 apk 作为文件显式安装,例如通过在手机上将其邮寄给自己,应用程序确实会崩溃,我认为这是正确的行为:

Could not find method myOnClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton
[trace snipped]

添加缺少的“公共”允许应用程序在从 apk 这样安装时运行。我认为这是 Android Studio 的 Instant Run 功能中的一个错误,并打算将其归档,除非有理由证明它不是错误。

这是有原因的,还是bug?

4

0 回答 0