鍍金池/ 教程/ Android/ 提交 Bugs
下載源碼
根據設備構建
Git 資源
構建系統
Android 平臺 64 位構建指導
初始化編譯環(huán)境
Android 源代碼
品牌指南
已知的問(wèn)題
Repo 命令手冊
構建內核
Bug 的生命周期
代碼主線(xiàn)、分支和版本
使用 Eclipse
提交補丁
下載與構建
參與
項目角色
補丁的生命周期
提交 Bugs
關(guān)于代碼風(fēng)格的指導
開(kāi)發(fā)
代碼名稱(chēng),標簽和版本號

提交 Bugs

感謝你對 Android 的喜愛(ài)。幫助我們改善 Android 的最好方式就是告訴我們你發(fā)現關(guān)于它的任何問(wèn)題。

報告問(wèn)題

注意:安全漏洞的問(wèn)題,請查看 Reporting Security Issues。如果你發(fā)現一個(gè)安全漏洞,請不要使用下面的形式。使用一個(gè)普通的形式,讓大家都可以看到你的報告,這樣能夠在 bug 修復之前讓其他用戶(hù)不再冒險。還有,請發(fā)送 email 到 security@android.com 描述詳情。

這里將講述非安全問(wèn)題的 bug:

  • 搜索你的 bug,看看是否已經(jīng)有人報告了。記得要搜索全部 issue,不僅僅是 open 狀態(tài)下的,因為這個(gè) issue 可能已經(jīng)報告過(guò)了并且已經(jīng)關(guān)閉了??梢酝ㄟ^(guò)星星的數量分類(lèi)可以找到最受歡迎的結果。

  • 如果你發(fā)現你的問(wèn)題很重要,請標記它。這樣就可以讓我們知道這個(gè) bug 修復的重要性。

  • 如果沒(méi)有人報告這個(gè) bug,你就可以提交這個(gè) bug。你可以使用下面的其中一種模版:

    • 設備中的 bug - 如果你是使用你自己的設備的用戶(hù),請使用這種。
    • 軟件中的 bug - 如果你是在開(kāi)發(fā)一個(gè) APP 的過(guò)程中遇到的,請使用這種。
    • 功能請求 - 如果你想在將來(lái)的版本中看到這個(gè)功能,請使用這種。

請記住 issue 跟蹤器不是一個(gè)用戶(hù)幫助論壇。這是一個(gè)待定的技術(shù)任務(wù)列表,以及和這些任務(wù)相關(guān)的信息,還有這些任務(wù)的進(jìn)展信息,包括哪些任務(wù)可能在短期內有進(jìn)展。

這個(gè) issue 跟蹤器緊緊專(zhuān)注于 Android 開(kāi)源項目。零售設備的問(wèn)題需要通過(guò)這些設備的支持渠道來(lái)報告,尤其是和 Nexus 不同的設備。開(kāi)發(fā)者的應用程序的問(wèn)題并不是 AOSP 需要報告的部分;這個(gè)也是 Google 應用的狀況。

請注意我們不能保證特定的 bug 將會(huì )在特定的版本中解決。查看Life of a Bug可以知道提交 bug 之后的情況。

一般而言,請盡可能的提交多一點(diǎn)的的 bug 信息,僅僅用一行內容告訴我們這里有問(wèn)題是沒(méi)用的,這樣維護者很可能不采取任何行動(dòng)就把它關(guān)閉了。你提交的詳情越多,你的問(wèn)題可能更好的解決。下面介紹一些好的 bug 提交報告和劣質(zhì)的報告。

劣質(zhì)的報告

標題:當運行 Eclipse 的時(shí)候,錯誤消息提示 Internal Error,并且需要打開(kāi) .log 查看詳情。重現步驟:Object o = null 的時(shí)候發(fā)生,變成 Object o 的時(shí)候不發(fā)生。預期的結果:我沒(méi)有獲取到錯誤信息 -- Object o = null 不產(chǎn)生作用。觀(guān)察結果:查看上文。

這個(gè)一個(gè)劣質(zhì)的報告因為沒(méi)有提供任何上下文相關(guān)的信息。這個(gè)是 ART 運行時(shí)的問(wèn)題? framework 的問(wèn)題? 或者其他問(wèn)題?這個(gè)也沒(méi)有提供任何關(guān)于重現錯誤的代碼或者線(xiàn)索。換句話(huà)說(shuō),這個(gè) bug 報告沒(méi)有提供足夠的信息讓維護者來(lái)采取行動(dòng),所以它將被忽略。

優(yōu)質(zhì)的報告

標題:執行到 Object o = null 的時(shí)候,引起 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 中可以查看更多信息,然后詢(xún)問(wèn)是否退出工作臺。在 setContentView(R.layout.main) 這里設置一個(gè)斷點(diǎn),然后單步執行 Object o = null 就會(huì )發(fā)生錯誤。如果我把它變成 Object o 就沒(méi)什么問(wèn)題。.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)
上一篇:補丁的生命周期下一篇:項目角色