原来还有这种操作,libs和jniLibs 还有jni不得不说的关系

本文介绍了在Android Studio中遇到.so文件未被正确打包到apk的问题,解析了在eclipse与Android Studio中.so文件放置的区别。在Android Studio中,只有jniLibs目录下的.so文件会被打包,而默认路径为srcmainjniLibs。解决方法包括手动创建jniLibs目录或将libs目录指定为.so文件路径。通过修改gradle文件,可以将libs目录添加为.so文件的搜索路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到一个android studio的.so文件的问题,当运行的时候出现了这样的一个错误java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader,这个错误就是.so文件不存在或者是文件路径不正确,我可以确定文件是存在的所以一定就是文件路径不对了。也就是说,我的文件路径放的不对,导致没有被放到apk里面,所以运行的时候就会报错,但是我们的so文件为什么没有被打包到我们的apk文件中?


这是因为在eclipse中,我们把so文件放入libs目录里,可以被打包到apk中,但是在android studio中,如果将so文件放在libs目录里,是不会被打包到apk中的,只有jniLibs目录里的so文件会被打包到apk中,当然这个目录指定的文件夹可以更改,但是默认就是\src\main\jniLibs,所以在没有做指定的情况下我们只有把so文件放在这里才能被打包运行。


首先解决这个问题的方式就是:


1,在project选项卡,下面创建如图的jniLibs目录,我们将我们需要的.so

文件复制到这个里面就可以了,这样创建的目录就是android studio默认的so文件路径了。直接创建文件把文件名设置为这个就可以了。




这个时候我们切换选项卡到android,就可以看到我们多了一个jniLibs目录,并且这个目录一看就不是那种自己创建的普通目录,比那些不知道高到哪里去了。可以看到现在他们两个里面的文件内容是对应的。




这就证明创建正确,这个也是在android studio中创建jniLibs目录的方法,当然这个和jni不一样,jni是这样创建的。



2.我们任然把so文件放在libs目录下,但是我们去重新指定jniLibs目录对应的文件夹,指定方法就是在gradle文件里面的android{ ....},添加一个


sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}


这样我们就能把libs目录也作为so文件的目录了,这个其实算是添加,因为你如果继续把so文件放在jniLibs目录下,也仍然可以,而且这里可以在‘libs’后面添加其他的目录。

添加然后同步这个时候我们可以发现,在原来project选项卡下,libs目录里面的内容,会对应到android选项卡下的jniLibs目录。



当我们切换到android选项卡,就可以看到改目录的内容已经改变,因为我们在gradle里面指定jniLibs='libs',这样我们把so文件放在libs,目录下也能过找到了。




当然,以上都是我瞎猜的,你就试试不行再去看看别的,哈哈哈!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值