(我是一名新的 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?