用户1340774522 :> 一直是坚定的NDK build用户,即Android.mk,不写CMakeLists.txt。最近写了一个Riru模块让Magisk可以处理隔离进程。由于Riru模块模板问题,用了cmake……坑。
首先,cmake默认使用c++_static,开启异常和RTTI,ndk-build默认STL是system,默认关闭异常和RTTI参数。这些还好,文档里面有。
> 看了so,发现全部都是调试信息。明明是release构建?
其实是AGP的小动作,把Release改成了RelWithDebInfo,导致参数从`-O3 -DNDEBUG`变为`-O2 -g -DNDEBUG`,并且破坏了预期逻辑。
> AGP搞这个小动作是为了App bundle,让编译时带调试信息,再把它剥出来也放入aab传给Google。没用App bundle也会吃这坨屎,只是调试信息剥出来没上传。
另外还有一坨屎是AGP会记下所有直接或间接使用的依赖,放入aab交给Google分析。由于不像so的调试信息,这个体积小,apk也难逃毒手:AGP会用Google的公钥加密它,然后放入apk签名块的0x504b4453处。
https://t.me/vvb2060Channel/445 2021-03-28 01:36:57 举报 收藏 操作