含FAT AAR的Titanium Android模块打包体积过小及PermissionActivity类找不到问题求助
看起来你在把带FAT AAR的原生Android模块转成Titanium模块时踩了好几个头疼的坑——打包出来的ZIP小得离谱,还死活找不到PermissionActivity,我来帮你一步步拆解排查:
1. 打包后ZIP仅103KB绝对不正常!问题出在依赖配置上
你用了compileOnly来引入AAR依赖,这就是核心问题!compileOnly是Gradle的「编译时仅依赖」模式:它只会在模块编译阶段提供AAR的类定义让代码不报错,但打包模块时会完全忽略AAR的所有内容——包括里面的内嵌AAR、.so文件、Activity类,最后出来的ZIP自然只有模块本身的空壳代码,体积小得可怜。
2. 如何确保AAR和.so文件被正确打包进模块?
直接修改模块的build.gradle依赖配置,把compileOnly换成implementation(或api,效果一致),这样Gradle会把AAR的所有内容(包括它内嵌的子AAR、jni目录下的.so文件)都打包到最终的模块ZIP里:
dependencies { implementation files('../../libs/FacialRecogntion_1.0.0.aar') }
改完后一定要先清理旧构建产物,再重新打包:
ti clean ti build -p android --build-only
打包完成后可以手动解压模块ZIP验证:里面应该能看到AAR相关内容,比如jniLibs目录下的各架构.so文件,或者模块资源里包含AAR的布局、Activity类字节码。
3. PermissionActivity标记为Launcher Activity会有影响吗?
在Titanium模块语境下,这个标记完全无效,也不会导致类找不到的问题。因为Titanium主应用的Launcher Activity由SDK本身管理,模块里的Activity不能设为Launcher,这个标记会被Titanium直接忽略。不过建议你把AAR Manifest里的这个标记去掉,避免不必要的配置混淆。
4. 解决「PermissionActivity类找不到」的关键补充步骤
除了修改依赖配置,还要做这两件事:
- 在模块的
AndroidManifest.xml里显式声明PermissionActivity:Titanium需要明确知道模块暴露了哪些原生组件,否则主应用找不到这个类:
<activity android:name="com.myApp.prod.PermissionActivity" />
- 核对类路径拼写:报错里的
com.myApp.prod.PermissionActivity要和AAR里实际的类路径完全一致,注意包名、类名的大小写——Windows文件名不敏感,但Java类路径是大小写敏感的,别在这里踩坑。
最后验证步骤
重新打包模块后,先解压ZIP确认里面包含AAR相关内容(比如libs下的AAR、jniLibs下的.so),再导入主Titanium项目运行,应该就能解决类找不到的问题了。
内容来源于stack exchange

