我有一个共享库放置在libs / armeabi文件夹中。它是使用以下方式加载的:
System.loadLibrary("library_name.so");
图书馆的大小约为3MB。加载时间非常长。有时会持续近20秒钟。它阻碍了我的GUI。我试图将
System.loadLibrary("library_name.so");
放入不同的线程中,但我的GUI仍然被阻塞。我知道其他应用程序使用更大的.so文件,但加载时间并不那么长。问题可能是什么?编辑
3MB是调试版本的大小。发布版本约为800KB,但问题仍然存在。一些额外的信息:
- .so包含我的两个相互连接的C++库 - 运行
arm-linux-androideabi-nm -D -C -g library_name.so
会显示许多函数和变量
- 我不再使用LOCAL_WHOLE_STATIC_LIBRARIES
- 这里是使用arm-linux-androideabi-readelf-tool
得到的节头表:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .dynsym DYNSYM 00000114 000114 00b400 10 A 2 1 4
[ 2] .dynstr STRTAB 0000b514 00b514 015b0c 00 A 0 0 1
[ 3] .hash HASH 00021020 021020 004d1c 04 A 1 0 4
[ 4] .rel.dyn REL 00025d3c 025d3c 006e98 08 A 1 0 4
[ 5] .rel.plt REL 0002cbd4 02cbd4 000468 08 A 1 6 4
[ 6] .plt PROGBITS 0002d03c 02d03c 0006b0 00 AX 0 0 4
[ 7] .text PROGBITS 0002d6f0 02d6f0 08e6e0 00 AX 0 0 8
[ 8] .ARM.extab PROGBITS 000bbdd0 0bbdd0 00bad0 00 A 0 0 4
[ 9] .ARM.exidx ARM_EXIDX 000c78a0 0c78a0 005b80 08 AL 7 0 4
[10] .rodata PROGBITS 000cd420 0cd420 005cc0 00 A 0 0 4
[11] .data.rel.ro.loca PROGBITS 000d46d8 0d36d8 0006e4 00 WA 0 0 4
[12] .fini_array FINI_ARRAY 000d4dbc 0d3dbc 000008 00 WA 0 0 4
[13] .init_array INIT_ARRAY 000d4dc4 0d3dc4 00009c 00 WA 0 0 4
[14] .data.rel.ro PROGBITS 000d4e60 0d3e60 00384c 00 WA 0 0 8
[15] .dynamic DYNAMIC 000d86ac 0d76ac 000100 08 WA 2 0 4
[16] .got PROGBITS 000d87ac 0d77ac 000854 00 WA 0 0 4
[17] .data PROGBITS 000d9000 0d8000 000648 00 WA 0 0 8
[18] .bss NOBITS 000d9648 0d8648 047271 00 WA 0 0 8
[19] .comment PROGBITS 00000000 0d8648 000026 01 MS 0 0 1
[20] .note.gnu.gold-ve NOTE 00000000 0d8670 00001c 00 0 0 4
[21] .ARM.attributes ARM_ATTRIBUTES 00000000 0d868c 00002d 00 0 0 1
[22] .shstrtab STRTAB 00000000 0d86b9 0000d8 00 0 0 1
RegisterNatives
还是给它们命名为Java_
来在JNI中注册它们的? - faddenLOCAL_WHOLE_STATIC_LIBRARIES
,而且没有它就无法构建我的项目。 - sinisha