在包装APK,libpjsua2.so期间重复文件

时间:2014-12-13 00:43:09

标签: android android-ndk android-studio pjsip

我收到此错误在将项目从Eclipse迁移到Android工作室时,在打包APK app-debug-unaligned.apk期间重复文件:

:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
Error:duplicate files during packaging of APK C:\Users\aaa\AndroidStudioProjects\Pjsua2\app\build\outputs\apk\app-debug-unaligned.apk
    Path in archive: lib/armeabi/libpjsua2.so
    Origin 1: C:\Users\aaa\AndroidStudioProjects\Pjsua2\app\src\main\jniLibs\armeabi\libpjsua2.so
    Origin 2: C:\Users\aaa\AndroidStudioProjects\Pjsua2\app\build\intermediates\ndk\debug\lib\armeabi\libpjsua2.so
You can ignore those files in your build.gradle:
    android {
      packagingOptions {
        exclude 'lib/armeabi/libpjsua2.so'
      }
    }
Error:Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK lib/armeabi/libpjsua2.so
    File 1: C:\Users\aaa\AndroidStudioProjects\Pjsua2\app\src\main\jniLibs\armeabi\libpjsua2.so
    File 2: C:\Users\aaa\AndroidStudioProjects\Pjsua2\app\src\main\jniLibs\armeabi\libpjsua2.so
Information:BUILD FAILED

我尝试更改build.gradle,但任何内容都会出现相同的错误。 我的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 15
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "org.pjsip.pjsua2.app"
        minSdkVersion 11
        targetSdkVersion 15

        ndk {
            moduleName "libpjsua2"
        }
    }

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

请帮我解决。

5 个答案:

答案 0 :(得分:1)

我从你的道路上看到' jniLibs'在里面&s; src / main'。这意味着在编译源代码时会包含.so文件。

移动' armeabi \ libpjsua2.so'将文件夹输出到名为' libs'的文件夹中。在' Pjsua2 \ app \'文件夹(即将其移出到基本应用程序文件夹)。

您的.so文件将出现在: Pjsua2 \应用\库\ armeabi \ libpjsua2.so

然后在gradle.build中添加以下内容" android"封闭:

android {
...
    sourceSets.main {
        jniLibs.srcDir 'libs'
    }
}

这可能会解决重复计算的问题(对我有用)。

答案 1 :(得分:1)

我遇到了同样的问题,最后通过删除build.gradle中的以下内容来实现它。

        ndk {
        moduleName "libpjsua2"
    }

答案 2 :(得分:1)

只需删除Android Studio导入项目中的jni文件夹(以及内部的两个文件:Android.mk& Application.mk)。

答案 3 :(得分:0)

@Yervant感谢小费,它帮助了很多! 对未来用户的另一个评论:移动库后,我遇到了另一个问题java.lang.UnsatisfiedLinkError: Native method not found: org.pjsip.pjsua2.pjsua2JNI.swig_module_init:()。解决方案是将pjsip类移动到单独的包和更新导入中。简单的地狱,但我花了一整天来弄明白;)

答案 4 :(得分:0)

我已成功将pjsua2导入Android Studio,所以也许我可以提供帮助。根据我的理解,jni文件夹包含2个文件,这些文件尝试再次重建库以创建第二个实例。通过移动jniLibs删除预先制作的版本可以正常工作,但我并不特别信任Android Studio正确构建它,因此,我只是删除了jni文件夹中的两个文件,问题就解决了。

我自己的jni文件夹位于app / src / main / jni

目录中

上面我可能完全错了,但它对我有用,所以我做了一些假设。