V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wenix
V2EX  ›  Android

Android Studio 导出含 jni 的 aar 多出 armeabi 两个空目录

  •  
  •   wenix · 2018-07-24 20:54:13 +08:00 · 5726 次点击
    这是一个创建于 2096 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 Android Studio 导出一个含 jni(cpp 源码放在 src/main/cpp 下)的 aar,结果目录中除了 jni 目录以外,还多了两个空的 arm 目录,即下面标记*的两个,我查找了 gradle 相关的参数和源码,也没有找到去掉的方法,请问有人遇到过吗?是如何解决的呢?

    *arm64-v8a
    *armeabi-v7a
    drawable
    drawable-v24
    jni
    res
    values
    AndroidManifest.xml
    R.txt
    classes.jar
    
    8 条回复    2021-01-15 16:24:18 +08:00
    nicevar
        1
    nicevar  
       2018-07-25 10:33:35 +08:00
    aar 就是一个 zip 包,你直接删除就行了,不过每次这样很麻烦
    看描述我觉得是你写的配置有问题,你这个 module 放到一个单独的工程里面单独编译会会有吗?或者在包含的工程里面配置 android.enableBuildCache = false 生成的 aar 看有没有,没有的话就是你某个地方加什么东西导致的
    wenix
        2
    wenix  
    OP
       2018-07-25 14:04:09 +08:00
    @nicevar 感谢回复。我这个就是单独的工程,不过是从 application 改成 library 的,其他的都没有变化。不过不管是放在 APP 里面的 module 还是这种改的独立 library module,最终生成的 aar 都有这种多余的 armeabi 目录,不知道是不是 ndk 和 CMake 两个各生成了一份,用 AS 比较少,翻了不少资料,也没搞定这个问题...

    build.gradle 内容如下:
    <pre>
    apply plugin: 'com.android.library'

    android {
    compileSdkVersion 26
    defaultConfig {
    minSdkVersion 26
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
    cmake {
    cppFlags "-std=c++11"
    abiFilters "armeabi-v7a", "arm64-v8a"
    }
    }
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
    debuggable true
    jniDebuggable true
    }
    }
    externalNativeBuild {
    cmake {
    path "CMakeLists.txt"
    }
    }
    }
    android.enableBuildCache=false

    dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    </pre>
    nicevar
        3
    nicevar  
       2018-07-25 14:33:04 +08:00
    defaultConfig 再加上
    ```
    ndk {
    abiFilters "armeabi-v7a", "arm64-v8a"
    }
    ```
    wenix
        4
    wenix  
    OP
       2018-07-25 15:44:37 +08:00
    @nicevar 没有作用,我在 src/main/下面加了 jniLibs 目录,然后 gradle 执行 assemble 都去不掉这个,gradle 里面有 mergeReleaseJniLibFolders 和 transformNativeLibsWithMergeJniLibsForRelease 这两个操作,貌似有关,但是不知道在哪里改这个流程...
    nicevar
        5
    nicevar  
       2018-07-25 17:14:16 +08:00
    @wenix 上面那个 ndk 属性应该是管用的,我有 cocos2d 和好几个 jni 项目打 aar 都是没有问题,这个配置还能去除其他第三方的 aar 里面的不需要的 cpu 架构 so,你手动删除一下 build 下的东西再重新打包试试,另外 AndroidStudio 版本不知道你是否是最新的,2.x 的有一个版本是有 bug 的 cmake 里面配置多个它只能生成一个,需要手动处理
    wbbtcool
        6
    wbbtcool  
       2019-03-08 16:32:50 +08:00
    我也碰到这问题,楼主问题解决了么?
    smdt
        7
    smdt  
       2021-01-12 18:47:19 +08:00
    @wbbtcool 也遇到了 你解决了吗
    wbbtcool
        8
    wbbtcool  
       2021-01-15 16:24:18 +08:00
    @smdt 没有解决,功能不影响,但是看着糟心。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2197 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:22 · PVG 08:22 · LAX 17:22 · JFK 20:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.