2012-07-05 35 views
5

Hướng dẫn tại http://developer.android.com/tools/publishing/preparing.html cho biết tôi nên xuất ứng dụng Android của mình trước khi phát hành ra công chúng. Các bước được thực hiện trong xuất khẩu là gì?Chính xác, việc xuất một ứng dụng Android là gì?

Đây là những gì tôi biết về:

  1. android: debuggable trong <Application> được thiết lập để sai trong AndroidManifest.xml
  2. APK được ký bởi chính (của tôi) của nhà phát triển, chứ không phải là built-in debug chính
  3. căn chỉnh nén được chạy trên đó có chữ ký aPK

    tôi đặt android: debuggable false bằng tay trong AndroidManifest.xml của tôi, và so sánh với một debug và xuất khẩu apk. Đây là các tập tin duy nhất mà là khác nhau:

    Binary files ../../release/x//classes.dex and x/classes.dex differ
    Binary files ../../release/x//META-INF/CERT.RSA and x/META-INF/CERT.RSA differ
    diff -r ../../release/x//META-INF/CERT.SF x/META-INF/CERT.SF
    diff -r ../../release/x//META-INF/MANIFEST.MF x/META-INF/MANIFEST.MF

    Vì vậy, hiện danh sách của tôi ở trên bao gồm mọi thứ? Hay các lớp khác nhau.dex chỉ ra rằng có một số khác biệt khác giữa một gỡ rối và apk đã xuất?

    Nhờ Lỗi 454 của câu trả lời dưới đây, tôi chạy baksmali vào file classes.dex trong mỗi apk, và tôi thấy một sự khác biệt:

    diff -r out/xx/xx/xx/BuildConfig.smali ../../../release/x/out//xx/xx/xx/BuildConfig.smali
    7c7
    < .field public static final DEBUG:Z = true
    ---
    > .field public static final DEBUG:Z

    Vì vậy, tôi cho rằng tôi có thể thêm mặt hàng thứ tư vào danh sách này:

  4. Trong lớp BuildConfig (gen /.../ BuildConfig.java), DEBUG được đặt thành false.

Trả lời

0

Hoặc nào classes.dex khác nhau chỉ ra rằng có một số khác biệt khác giữa debug và apk xuất khẩu?

Ngay cả với mã giống nhau, kết quả classes.dex không phải là nhị phân giống hệt với các phiên bản đã biên dịch trước đó. Đó là do những cách khác nhau mà trình biên dịch tối ưu hóa mã AFAIK.

5

Ngoài những gì bạn đã liệt kê, bảo vệ cũng được chạy trong khi xuất.

Nếu bạn là vô cùng tò mò về bản chất của sự khác biệt trong classes.dex, bạn có thể lấy baksmali, giải nén apk của bạn và ngược file classes.dex:

java -jar baksmali-1.3.3.jar classes.dex 

này sẽ tạo ra một ra/vào thư mục với các nội dung mà bạn có thể khác nhau giữa cũ/mới.

Lý do BuildConfig.Cờ DEBUG khác nhau là do bạn xuất phiên bản Bản phát hành so với phiên bản Gỡ lỗi như được giải thích trong các SDK Release Notes Revision 17:

Thêm tính năng cho phép bạn chạy một số mã chỉ trong chế độ gỡ lỗi. Các bản dựng bây giờ tạo ra một lớp có tên BuildConfig chứa hằng số DEBUG được tự động đặt theo loại xây dựng của bạn. Bạn có thể kiểm tra hằng số (BuildConfig.DEBUG) trong mã của bạn để chạy các hàm gỡ lỗi .

+0

Cảm ơn. Tôi chạy baksmali và sửa đổi câu hỏi của tôi. – craig65535

+0

BuildConfig đã được thêm vào SDK Revision 17 http://developer.android.com/tools/sdk/tools-notes.html –

1

Có một số bước xảy ra cho bản dựng, cho dù mục tiêu là debug hoặc release. Đây không phải là câu trả lời trực tiếp nhưng tôi khuyên bạn nên xem android-sdk/tools/ant/build.xml

Khi bạn mở tệp, hãy tìm kiếm target name="release". Bạn sẽ thấy thuộc tính depends liệt kê các mục tiêu khác trong cùng một tệp sẽ được gọi. Bạn có thể so sánh các mục tiêu một số release chạy so với mục tiêu debug. Bên trong mỗi mục tiêu, bạn có thể thấy cụ thể những gì được chạy (chẳng hạn như một số tiện ích trong android-sdk/platform-tools), cùng với những gì xác định nếu một cái gì đó được chạy.

Bạn cũng có thể xem thông số nào được chuyển đến tiện ích bên ngoài trong cuộc gọi đích cho phép bạn đọc tài liệu về các thông số của tiện ích để xem cụ thể những gì đang xảy ra cho một bước cụ thể. Và để lưu ý, trong khi bạn có thể xuất ứng dụng trong nhật thực, điều tra ant build.xml cung cấp một cách để xác định một cách hệ thống từng bước sẽ được thực hiện cho một bản dựng đầy đủ. Ví dụ về mức độ phức tạp của việc này, nếu bạn nhìn vào mục tiêu -set-release-mode, bạn có thể thấy một ví dụ nơi người ta có thể tạo một gói gỡ lỗi được ký với các phím phát hành thay vì khóa gỡ lỗi.

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