感謝你對 Android 的喜愛。幫助我們改善 Android 的最好方式就是告訴我們你發(fā)現(xiàn)關于它的任何問題。
注意:安全漏洞的問題,請查看 Reporting Security Issues。如果你發(fā)現(xiàn)一個安全漏洞,請不要使用下面的形式。使用一個普通的形式,讓大家都可以看到你的報告,這樣能夠在 bug 修復之前讓其他用戶不再冒險。還有,請發(fā)送 email 到 security@android.com 描述詳情。
這里將講述非安全問題的 bug:
搜索你的 bug,看看是否已經(jīng)有人報告了。記得要搜索全部 issue,不僅僅是 open 狀態(tài)下的,因為這個 issue 可能已經(jīng)報告過了并且已經(jīng)關閉了。可以通過星星的數(shù)量分類可以找到最受歡迎的結果。
如果你發(fā)現(xiàn)你的問題很重要,請標記它。這樣就可以讓我們知道這個 bug 修復的重要性。
如果沒有人報告這個 bug,你就可以提交這個 bug。你可以使用下面的其中一種模版:
請記住 issue 跟蹤器不是一個用戶幫助論壇。這是一個待定的技術任務列表,以及和這些任務相關的信息,還有這些任務的進展信息,包括哪些任務可能在短期內(nèi)有進展。
這個 issue 跟蹤器緊緊專注于 Android 開源項目。零售設備的問題需要通過這些設備的支持渠道來報告,尤其是和 Nexus 不同的設備。開發(fā)者的應用程序的問題并不是 AOSP 需要報告的部分;這個也是 Google 應用的狀況。
請注意我們不能保證特定的 bug 將會在特定的版本中解決。查看Life of a Bug可以知道提交 bug 之后的情況。
一般而言,請盡可能的提交多一點的的 bug 信息,僅僅用一行內(nèi)容告訴我們這里有問題是沒用的,這樣維護者很可能不采取任何行動就把它關閉了。你提交的詳情越多,你的問題可能更好的解決。下面介紹一些好的 bug 提交報告和劣質(zhì)的報告。
標題:當運行 Eclipse 的時候,錯誤消息提示 Internal Error,并且需要打開 .log 查看詳情。重現(xiàn)步驟:Object o = null 的時候發(fā)生,變成 Object o 的時候不發(fā)生。預期的結果:我沒有獲取到錯誤信息 -- Object o = null 不產(chǎn)生作用。觀察結果:查看上文。
這個一個劣質(zhì)的報告因為沒有提供任何上下文相關的信息。這個是 ART 運行時的問題? framework 的問題? 或者其他問題?這個也沒有提供任何關于重現(xiàn)錯誤的代碼或者線索。換句話說,這個 bug 報告沒有提供足夠的信息讓維護者來采取行動,所以它將被忽略。
標題:執(zhí)行到 Object o = null 的時候,引起 Eclipse 的 Internal Error bug,使用的 Eclipse 版本 3.3.1.1,m37a android,代碼如下:
package com.saville.android;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class TestObjectNull extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Object o = null;
o = "hi";
Log.v(TAG, "o=" + o);
}
static final String TAG = "TestObjectNull";
}
Eclipse 表明是 Internal Error,并且在 .log 中可以查看更多信息,然后詢問是否退出工作臺。在 setContentView(R.layout.main) 這里設置一個斷點,然后單步執(zhí)行 Object o = null 就會發(fā)生錯誤。如果我把它變成 Object o 就沒什么問題。.log 文件的最后一行是:
!ENTRY org.eclipse.core.jobs 4 2 2008-01-01 13:04:15.825
!MESSAGE An internal error occurred during: "has children update".
!STACK 0
java.lang.InternalError: Invalid signature: "<null>"
at
org.eclipse.jdi.internal.TypeImpl.signatureToTag(TypeImpl.java:307)
at
org.eclipse.jdi.internal.LocalVariableImpl.tag(LocalVariableImpl.java:185)
at
org.eclipse.jdi.internal.StackFrameImpl.getValues(StackFrameImpl.java:128)
at
org.eclipse.jdi.internal.StackFrameImpl.getValue(StackFrameImpl.java:73)
at
org.eclipse.jdt.internal.debug.core.model.JDILocalVariable.retrieveValue(JDILocalVariable.java:57)
at
org.eclipse.jdt.internal.debug.core.model.JDIVariable.getCurrentValue(JDIVariable.java:66)
at
org.eclipse.jdt.internal.debug.core.model.JDIVariable.getValue(JDIVariable.java:88)
at
org.eclipse.debug.internal.ui.model.elements.VariableContentProvider.hasChildren(VariableContentProvider.java:62)
at
org.eclipse.jdt.internal.debug.ui.variables.JavaVariableContentProvider.hasChildren(JavaVariableContentProvider.java:73)
at
org.eclipse.debug.internal.ui.model.elements.ElementContentProvider.updateHasChildren(ElementContentProvider.java:223)
at
org.eclipse.debug.internal.ui.model.elements.ElementContentProvider$3.run(ElementContentProvider.java:200)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)