Xamarin中AppCompatActivity无法调用onCreate问题求助
我之前也碰到过一模一样的JNI报错,当时折腾了好一阵才找到原因,你可以按下面的步骤逐一排查:
检查Activity的继承与声明一致性
先确认你的MainActivity确实实打实继承自android.support.v7.app.AppCompatActivity——别不小心写成了androidx.appcompat.app.AppCompatActivity(毕竟你用的是support库,不是AndroidX,这俩不能混)。同时检查AndroidManifest.xml里声明的Activity全类名和实际代码里的包名、类名完全匹配,别出现拼写错误或者包名写错的情况。清理构建缓存,彻底重新编译
这种JNI类实例不匹配的问题,十有八九是构建缓存搞的鬼。试试这些操作:- 点击Android Studio顶部菜单栏的
Build->Clean Project - 接着点
Build->Rebuild Project - 要是还不行,直接手动删除项目根目录下的
.gradle文件夹和app/build文件夹,然后重启AS再重新构建
- 点击Android Studio顶部菜单栏的
排查混淆配置(如果开了混淆)
错误日志里的md548d3f6682eaea9ae319016469055fba4.MainActivity是混淆后的类名,说明你开了ProGuard/R8。这时候得确保support库的类没被错误混淆,在你的混淆规则文件里加上:-keep class android.support.v7.app.AppCompatActivity { *; } -keep class 你的实际包名.MainActivity { *; }把上面的“你的实际包名”换成你MainActivity的真实包名就行,避免父类或者自身被混淆导致类加载异常。
关掉Instant Run功能
Android Studio的Instant Run有时候会搞出类加载的幺蛾子,尤其是在使用老版本support库的项目里。你可以去File->Settings->Build, Execution, Deployment->Instant Run,把所有相关的勾选框都取消,然后重启AS再运行项目试试。确认所有support库版本完全统一
虽然你说AppCompat和设计库版本一致,但还是要检查所有support相关的依赖(比如support-v4、support-annotations这些)都用的是23.0.0.1版本,版本不一致很容易导致类冲突。可以在app的build.gradle里用变量统一管理版本,比如:ext { supportVersion = '23.0.0.1' } dependencies { implementation "com.android.support:appcompat-v7:$supportVersion" implementation "com.android.support:design:$supportVersion" implementation "com.android.support:support-v4:$supportVersion" }检查多dex配置(如果启用了多dex)
如果你的项目开启了多dex,要确保MainActivity被包含在主dex里,不然可能会出现父类找不到的情况。配置方式如下:
在build.gradle里开启多dex:android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'com.android.support:multidex:1.0.1' }然后让你的Application类继承
MultiDexApplication,或者在Application的attachBaseContext方法里调用MultiDex.install(this)。
内容的提问来源于stack exchange,提问作者divanov42

