当前位置:  开发笔记 > Android > 正文

Android多功能库模块用于应用程序模块

如何解决《Android多功能库模块用于应用程序模块》经验,为你挑选了0个好方法。

我试图建立一个项目,该项目依赖于使用“ .so”文件的库模块。

到目前为止,我有:

库模块

.so文件进入jniLib:armeabi,armeabi-v7a和x86。

这是用于配置的Android.mk文件:

#版权所有(C)2010 The Android Open Source Project
#
#根据Apache许可证2.0版(“许可证”)获得许可;
#除非符合许可,否则您不得使用此文件。
#您可以在以下位置获得许可的副本
#
#http://www.apache.org/licenses/LICENSE-2.0
#
#除非适用法律要求或书面同意,否则软件
根据许可协议分发的#是按“原样”分发的,
#没有任何明示或暗示的保证或条件。
#有关特定语言的管理权限,请参阅许可证。
#许可中的限制。

LOCAL_PATH:= $(调用my-dir)

包括$(CLEAR_VARS)

#在这里我们给出模块名称和源文件

LOCAL_MODULE:=我的模块
LOCAL_SRC_FILES:= $(TARGET_ARCH_ABI)/my-lib.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include
包括$(PREBUILT_SHARED_LIBRARY)

这是build.gradle文件:

应用插件:“ com.android.library”

android {
    编译版本23
    buildToolsVersion“ 23.0.2”

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        版本代码1
        versionName“ 1.0”
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        发布 {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
        }
    }

    sourceSets.main.jni.srcDirs = [] //禁用自动ndk-build调用

    //默认情况下,将发布样式设置为
    defaultPublishConfig“ X86Debug”
    publishNonDefault true

    productFlavors {
        //有关abiFilter的详细说明,请参阅“支持的ABI” @
        // https://developer.android.com/ndk/guides/abis.html#sa
        手臂{
            ndk {
                abiFilter(“ armeabi”)
            }
        }
        arm7 {
            ndk {
                abiFilter(“ armeabi-v7a”)
            }
        }
        x86 {
            ndk {
                abiFilter(“ x86”)
            }
        }
        //这是包含所有ABI的胖APK
        脂肪
    }
}

依赖项{
    testCompile'junit:junit:4.12'

    编译'com.j256.ormlite:ormlite-android:4.48'
}

应用模块

这是build.gradle:

...

应用插件:“ com.android.application”

...

android {

    ...

    //如果要对多个口味应用多个过滤器,则顺序很重要
    flavourDimensions“ api”,“ abi”

    productFlavors {
        //定义单独的dev和prod产品风格。
        开发{
            维度“ api”
            //开发人员利用minSDKVersion = 21允许Android gradle插件
            //预先处理每个模块并生成可在其中测试的APK
            // Android Lollipop,无需耗时的dex合并过程。
            minSdkVersion 21
        }

        产品{
            维度“ api”
            //应用程序的实际minSdkVersion。
            minSdkVersion Integer.parseInt((String)project.ANDROID_BUILD_MIN_SDK_VERSION)
        }

        //有关abiFilter的详细说明,请参阅“支持的ABI” @
        // https://developer.android.com/ndk/guides/abis.html#sa
        手臂{
            尺寸“ abi”
            ndk {
                abiFilter(“ armeabi”)
            }
        }
        arm7 {
            尺寸“ abi”
            ndk {
                abiFilter(“ armeabi-v7a”)
            }
        }
        x86 {
            尺寸“ abi”
            ndk {
                abiFilter(“ x86”)
            }
        }
    }

    ...

    buildTypes {
        发布 {
            //禁用所有组件进行调试
            可调试假
            //使用更新的Proguard规则
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
            //混淆,清理和优化项目代码
            minifyEnabled是
            //启用zip align进行优化
            zipAlignEnabled是

            //仅在发布buildType上使用发布键
            signingConfig signingConfigs.prod
        }

        调试{
            可调试true

            minifyEnabled false

            zipAlignEnabled false
        }
    }

    ...

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

配置{
    // x86版本
    devX86DebugCompile
    prodX86DebugCompile
    devX86ReleaseCompile
    prodX86ReleaseCompile

    //手臂版本
    devArmDebugCompile
    prodArmDebugCompile
    devArmReleaseCompile
    prodArmReleaseCompile

    // arm7版本
    devArm7DebugCompile
    prodArm7DebugCompile
    devArm7ReleaseCompile
    prodArm7ReleaseCompile
}

依赖项{
    编译fileTree(include:['* .jar'],dir:'libs')
    devX86DebugCompile项目(路径:':my-module-lib',配置:'x86Debug')
    prodX86DebugCompile项目(路径:':my-module-lib',配置:'x86Debug')
    devX86ReleaseCompile项目(路径:':my-module-lib',配置:'x86Release')
    prodX86ReleaseCompile项目(路径:':my-module-lib',配置:'x86Release')
    devArmDebugCompile项目(路径:':my-module-lib',配置:'armDebug')
    prodArmDebugCompile项目(路径:':my-module-lib',配置:'armDebug')
    devArmReleaseCompile项目(路径:':my-module-lib',配置:'armRelease')
    prodArmReleaseCompile项目(路径:':my-module-lib',配置:'armRelease')
    devArm7DebugCompile项目(路径:':my-module-lib',配置:'arm7Debug')
    prodArm7DebugCompile项目(路径:':my-module-lib',配置:'arm7Debug')
    devArm7ReleaseCompile项目(路径:':my-module-lib',配置:'arm7Release')
    prodArm7ReleaseCompile项目(路径:':my-module-lib',配置:'arm7Release')

    ...
}

这似乎当前有效(至少在编译时有效),但是我觉得很难像这样维护它,并且我必须添加很多依赖项和配置(最后,我要支持所有ABI,以便每个apk)。

有没有更简单,更清洁的方式来做这样的事情?

此外,在生成的APK中,所有ABI都包括在内。我为此做错了吗?

LE

我已经解决了所有ABI都包含在APK中的问题。我只需要在应用程序模块的productFlavors中使用abiFilter。我已经更新了代码以反映这一点。我只注意到了一个小问题:库模块的结果aar仍然包括所有ABI,即使它已针对每种口味正确设置了abiFilter。

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有