1. 程式人生 > >android studio下,如何減少編譯生成的jni動態庫的大小。

android studio下,如何減少編譯生成的jni動態庫的大小。

也就是說,g++與ndk的g++編譯出來的檔案相比,除了debug資訊之外,也要大600K,如果想要近一步減少大小,通過把它的.symtab也給去掉。
52DABCB9-591A-40A7-A886-5102AF66A9BA.png
A3728E9C-18C6-4537-B850-975595813439.png
減少到了900K,而此時的elf資訊:
B93B155F-BF1C-449E-9058-F47B3BD9DF7A.png
它少了.symtab和.strtab兩個section,.symtab就是符號表,當我們除錯程式時,它能告訴我們在哪個函式中出錯了.

至少為什麼當我們在ndk中,沒有指定-g而生成的so檔案中確包含了debug資訊就還不知道為什麼,不過我們可以在生成libsails.so庫時,通過g++的選項去掉它:
2CAB474B-EE80-4779-BB95-B8BD3F28FAB8.png
增加一個-s選項就可以了,它相當於我們在生成的庫時strip —strip-all libsails.so的效果。不過這個選項現在在標準的g++中好像已經過期了。

當然通過-O1 -O2之類的選項,也可以減少包大小,下面通過-O2可以減少到630K:
80BAB53B-52EF-4300-BAB7-0B1FFDF4BE5E.png