Đố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
và
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 đủ'.
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? –
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