2013-07-10 27 views
7

Có cách nào để hoạt động Android phát hiện ra cách nó được khởi chạy không? Cụ thể, tôi muốn phát hiện xem ứng dụng của tôi đã được khởi động từ Eclipse hay chưa, nếu nó được khởi động bình thường (ví dụ: từ màn hình chính hoặc danh sách ứng dụng đã cài đặt).Ứng dụng Android của tôi có thể phát hiện nếu nó được khởi chạy từ Eclipse không?

Đây là proxy để biết liệu báo cáo sự cố có nên được tải lên hay không. Tôi giả sử nếu Eclipse khởi chạy ứng dụng, thì tôi không cần phải tải lên các sự cố, vì tôi đã gỡ lỗi ứng dụng, nhưng nếu cùng một ứng dụng được khởi chạy "bình thường", tôi muốn tải lên bất kỳ ứng dụng nào ngoại lệ.

Điều này chỉ để làm cho việc gỡ lỗi và phát triển cá nhân của tôi dễ dàng hơn, vì vậy, các hacks hoặc chỉnh sửa không thể bỏ qua đối với Eclipse rất hữu ích đối với tôi.

Trả lời

2

This phương pháp dường như làm những gì bạn yêu cầu:

if(!android.os.Debug.isDebuggerConnected()) { 
    // Send report... 
} 

này sẽ cho bạn biết nếu bạn hiện đang gắn liền với một trình gỡ lỗi. Nếu được khởi chạy từ ngăn kéo ứng dụng hoặc lối tắt màn hình chính, bạn sẽ không được đính kèm (trừ khi bạn đã có một phiên bản đang chạy được đính kèm) và phương pháp này sẽ trả về false - trong trường hợp này bạn có thể tải lên thông tin về sự cố.

+0

Điều này sẽ kiểm tra xem ứng dụng có thực sự được gỡ lỗi hay không. –

+0

Có, đó là một trong ít nhất hai cách khác nhau có thể được khởi chạy từ nhật thực. –

+0

Tôi chỉ cố gắng này và có được đúng khi chạy từ Eclipse Debugger (và sai khi chạy từ launcher). Tuy nhiên, việc chạy ứng dụng "bình thường" từ Eclipse cũng trả về false. Chạy theo trình gỡ lỗi là một chút nặng, cho mỗi lần sử dụng nhưng có lẽ tôi có thể quen với điều đó. –

1

Bạn có thể sử dụng if (BuildConfig.DEBUG) để cho biết bản dựng gỡ lỗi từ bản dựng bản phát hành.

+0

Điều này cũng hữu ích, nhưng bạn cần phải cẩn thận với nó - nó xuất hiện đôi khi bạn có thể nhận được một bản phát hành xây dựng với BuildConfig.DEBUG đặt thành true. Xem [tại đây] (https://code.google.com/p/android/issues/detail?id=27940) và [tại đây] (http://www.digipom.com/be-careful-with-buildconfig- gỡ lỗi /). –

+0

Như đã hiểu, đó là tài sản của một bản dựng (một hằng số trong ứng dụng). Tôi muốn thử nghiệm một cái gì đó thay đổi tùy thuộc vào cách ứng dụng (debug-build) được bắt đầu. –

1

Bạn (I?) Có thể thêm hoạt động mới vào ứng dụng và khởi chạy Eclipse. Các hoạt động mới sẽ thiết lập một lá cờ mà nếu không không được thiết lập, và nếu không được như vậy. Việc sử dụng thường xuyên ứng dụng sẽ thông qua hoạt động mặc định và do đó cờ sẽ được đặt mặc định là không được đặt.

Thêm một DebugActivity mới mở rộng hoạt động hiện có (gọi nó là MainActivity):

public class DebugActivity extends MainActivity { 
    public DebugActivity() { 
     super(true); // running from Eclipse 
    } 
} 

Thêm một constructor boolean mới và không-arg constructor để MainActivity để hỗ trợ các lớp con mới:

private final boolean viaEclipse; 

public MainActivity() { 
    this(false); 
} 

public MainActivity(boolean viaEclipse) { 
    this.viaEclipse = viaEclipse; 
} 

Sao chép thông tin <activity> trong tệp kê khai ứng dụng cho .MainActivity nhưng thay đổi bản sao để tham chiếu .DebugActivity mới. Xóa thẻ <category> (thẻ "LAUNCHER") từ .DebugActivity<intent-filter> để ngăn thẻ hiển thị trong giao diện người dùng Android.

Trong Eclipse, chọn Run -> Run Configurations .... Chọn cấu hình chạy hiện tại cho ứng dụng. Nhấp vào biểu tượng "Sao chép cấu hình khởi chạy được chọn hiện tại" và trên tab Android trong thay đổi trùng lặp Launch Action từ "Khởi chạy hoạt động mặc định" thành "Khởi chạy:" và chọn .DebugActivity mới.

Nhược điểm

  1. Eclipse "debug" chạy không giống với một hoạt động "thực", nhưng sự khác biệt là khá nhỏ (về cơ bản chỉ là tên lớp ra mắt và một mục thêm trên stack) . Không có mã trùng lặp nào ở phía Java, ít nhất.

  2. Tôi đã sao chép phần lớn nội dung của số <activity> vào tệp kê khai, hơi mỏng manh nhưng không quá tệ.

Vẫn sẽ tốt hơn nếu có thứ gì đó đơn giản hơn thế này.

+0

Nếu bạn xóa dòng '' khỏi mục DebugActivity trong tệp kê khai của mình, nó sẽ không xuất hiện dưới dạng biểu tượng trong trình khởi chạy của bạn :) –

+0

Tốt. Một nhược điểm nhỏ hơn ... Tôi sẽ cập nhật câu trả lời. –

Các vấn đề liên quan