本文主要通过分析源码来分析so使用的知识点和问题总结,所以涉及到了很多的源码类,这里就现提供一下:
1、PackageManagerService.java,good class
+setNativeLibraryPaths:设置应用的native库路径
+scanPackageDirtyLI:扫描包内容初始化应用信息
2、ActivityManagerService.java
+startProcessLocked:发送命令给Zygote进程启动一个虚拟机
3、NativeLibraryHelper.java
底层实现类:com_android_internal_content_NativeLibraryHelper.cpp
+copyNativeBinariesWithOverride:释放apk中的so文件到本地目录
+findSupportedAbi:遍历apk中的so文件结合abiList值得到应用支持的abi类型索引值
4、LoadApk类和ApplicationLoaders类
5、VMRuntime.java
底层实现类:dalvik_system_VMRuntime.c
+getInstructionSet:获取虚拟机的指令集类型
+is64BitAbi:判断VM是否为64位
6、Runtime.java
底层实现类:dalvik/vm/native/java_lang_Runtime.cpp,dalvik/vm/Native.cpp
+nativeLoad:加载so文件
想看一下各种类型的格式是否在csdn上容易实现。