2012-10-30 13 views
10

Đối với luận án của tôi, tôi đang sửa đổi khung android và xây dựng nguồn (4.1.1 Jelly Bean). Tôi có thể làm một bản dựng đầy đủ, nhưng vì điều này rất tốn thời gian (tôi đang phát triển trên máy ảo ubuntu 12.04 64bit) tôi muốn xây dựng các mô-đun riêng biệt.Xây dựng các mô-đun Android riêng biệt với tắt dexpreopt

Ví dụ: Khi làm thay đổi đối với các module vị trí, chúng ta có thể chỉ cần xây dựng các mô-đun đã thay đổi, và thực hiện một hệ thống hình ảnh mới:

mmm frameworks/base 
make snod 

Nhưng điều này không làm việc. Mỗi lần tôi cố gắng để khởi động, hệ thống hình ảnh mới sẽ không khởi động được vì:

I/dalvikvm(1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex' 

Sau khi một số nghiên cứu, tôi đã cố gắng để vô hiệu hóa dexpreopt với các biến môi trường

export $WITH_DEXPREOPT=false 

export $DISABLE_DEXPREOPT=true 

và thực hiện xây dựng lại đầy đủ bằng 'make installclean'. Các công trình xây dựng lại đầy đủ và các thay đổi đối với khung công tác có mặt trong bản dựng. Nhưng sau khi thực hiện một thay đổi mới, vẫn còn 'mmm khuôn khổ/cơ sở' và 'làm cho snod' kết quả trong không phù hợp dexpreopt.

Việc xây dựng/lõi/makefile từ 'làm snod' cũng đưa ra cảnh báo: 'Cảnh báo: với dexpreopt kích hoạt, bạn có thể cần một đầy đủ xây dựng lại.', Mà xuất phát từ dòng này trong makefile:

ifeq (true,$(WITH_DEXPREOPT)) 
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.) 
endif 

Điều này khiến tôi tin rằng biến $ WITH_DEXPREOPT không được đặt chính xác hoặc đọc? Cho đến nay tôi chưa thể có được một hình ảnh hệ thống có thể khởi động mà không thực hiện việc xây dựng lại toàn bộ. Là thủ tục tôi làm theo đúng để vô hiệu hóa dexpreopt, hoặc là có bất kỳ cách nào khác để xây dựng các mô-đun riêng biệt sau khi thực hiện thay đổi cho khuôn khổ và nhận được một hình ảnh hệ thống mới?

Mục tiêu xây dựng là 'đầy đủ'.

Trả lời

11

Rõ ràng các biến môi trường WITH_DEXPREOPT được ghi đè bởi một biến WITH_DEXPREOPT nội bộ trong

build/target/board/generic/BoardConfig.mk 

Thay đổi này là false, hoặc theo những người ở nhóm google, bắt đầu một làm với:

make showcommands WITH_DEXPREOPT=false 

không lừa. Xây dựng một mô-đun cụ thể và tạo một hình ảnh hệ thống mới giờ đây sẽ tạo ra một bản dựng khởi động.

(nguồn: https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion)

+1

Cảm ơn! Đối với một số lý do thay đổi trong mã nguồn không được phản ánh trong trình mô phỏng ngay cả sau khi xây dựng lại sạch sẽ. Thiết lập biến sau khi thực hiện sạch sẽ và cài đặt sửa chữa nó. Tuy nhiên, khi tôi thực hiện một thay đổi mã, sử dụng mmm khuôn khổ/cơ sở, và sau đó làm cho snod, giả lập sẽ không khởi động (có nghĩa là nó đã bị mắc kẹt trên màn hình "android" "). xây dựng bằng cách sử dụng make showcommands WITH_DEXPREOPT = false Bạn đã sử dụng chế độ make snod hay liên tục sử dụng WITH_DEXPREOPT = false mỗi khi bạn thực hiện thay đổi? –

+1

Tôi đã không kiểm tra nó bằng cách sử dụng lệnh show_DEXPREOPT = false, tôi vừa thay đổi nó trong BoardConfig. mk và đã làm sạch và xây dựng lại hoàn toàn.Từ thời điểm này, hãy thực hiện các thay đổi trong ví dụ như mô-đun Vị trí tồn tại trong bản dựng sau khi 'mmm framework/base' và 'make snod'. Nếu trình giả lập của bạn không khởi động được, hãy kiểm tra bằng 'adb logcat' để xác định vấn đề. – b74ckb1rd

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