高版本Gradle加载so文件的问题

最近需要做关于人脸识别的项目,碰到个加载so文件的问题。在此记录一下。

低版本gradle
https://services.gradle.org/distributions/gradle-4.4-all.zip
com.android.tools.build:gradle:3.1.2

高版本gradle
https://services.gradle.org/distributions/gradle-6.1.1-all.zip
com.android.tools.build:gradle:4.0.1

先说一下现象
在高版本中工程中的libs中加入了一个aar文件
并且在app.gradle中加入了

 repositories{
        flatDir{
            dirs 'libs'
        }
    }
dependencies {
    implementation(name: 'sdk', ext: 'aar')
}

sdk.aar中
aar中的jni文件

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("xxx");
    }
}

启动应用后就报错,说找不到libxxx.so文件,一脸懵逼。
在同事电脑中,可以正常运行。后来把他的工程拿过来看了下,对比了一下,代码完全一样。唯一不一样的就是gradle版本了。我就试了一下。
嘿!还真的正常了。

因为在aar文件中 架构是armeabi-v7a的。所以在app.gradle中加入

ndk{
            abiFilters'armeabi-v7a'
        }

即可

Gradle约定文件目录是一种约定,它规定了Gradle构建文件和资源文件在项目中的位置。这些约定有助于保持代码结构的一致性,并使构建工具更容易理解和使用。 以下是Gradle约定文件目录的主要组成部分: 1. **src/main**:这是项目的源代码目录。通常包含Java(在`src/main/java`)、Kotlin(在`src/main/kotlin`)和其他语言(如Groovy)的源代码文件。 2. **src/test**:这是测试代码的目录。通常包含JUnit或类似的测试框架的测试用例。 3. **build**:这是Gradle构建文件(如`build.gradle`)所在的目录。这里通常还包含构建脚本中引用的其他文件,如依赖项和插件配置文件。 4. **libs**:这是存放项目依赖的目录。Gradle会自动扫描此目录及其子目录中的jar包,并将其添加到项目的类路径中。 5. **assets**:这是存放项目非代码资源的目录,如图像、音频、配置文件等。这些资源通常在运行时由应用程序加载。 6. **generated**:这个目录用于存放Gradle自动生成文件,如编译后的Java类文件、Kotlin编译后的KClass等。 7. **doc**:这个目录用于存放项目文档和其他说明文件。 这些约定为构建系统提供了清晰的结构,使得开发者能够更轻松地理解和管理他们的项目。此外,Gradle和其他构建工具可以根据这些约定自动执行一些常见的构建任务,如编译、测试和打包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值