如何使用Android Studio Gradle构建复制或使用本机库?

Sve*_*ges 5 android gradle android-studio

我有一个本地的lib

/ libs/armeabi文件夹名为libparser.so和一个关联的jar文件.

我更改了gradle构建文件以包含jar文件,这看起来很简单(MYNEWJAR):

dependencies {
    compile files('libs/android-support-v4.jar', 'libs/MYNEWJAR.jar')
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,我认为它无法找到本机库:

E/AndroidRuntime(22569): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load parser from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.hybris.mobile.history-1.apk,libraryPath=/data/app-lib/com.hybris.mobile.history-1]: findLibrary returned null
E/AndroidRuntime(22569):    at java.lang.Runtime.loadLibrary(Runtime.java:365)
E/AndroidRuntime(22569):    at java.lang.System.loadLibrary(System.java:535)
E/AndroidRuntime(22569):    at com.senstation.android.pincast.Pincast.<clinit>(Pincast.java:1299)
E/AndroidRuntime(22569):    ... 17 more
Run Code Online (Sandbox Code Playgroud)

你能帮助我直接获取构建文件,它将包含本机库吗?这似乎是在Eclipse上自动发生的,但我真的想使用android studio.

谢谢!斯文

Net*_*dan 6

我发现用户Assaf Gamliel的这个答案非常有用.

并做了一些改变,使它更清洁.

您不需要将.zip文件重命名为.jar,只需在build.gradle脚本上添加正常的编译文件依赖项即可.因此,您将创建一个foo.zip文件,其结构类似于:

foo.zip - >
| - /lib
| - | - /armeabi
| - | - | - *.so
| - | - /x86
| - | - | - *.so

将它放在libs文件夹中,然后使用编译文件('libs/foo.zip')将其添加到gradle :

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+' //gradle plugin update for Andoid Studio 0.2.+
    }
}
apply plugin: 'android'
dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/foo.zip') //zip file should be in Module's /libs folder (not the Project's /lib)
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}
Run Code Online (Sandbox Code Playgroud)

当gradle执行构建时,它只是解压缩您添加的文件,保留其结构.


Dav*_*ave 1

嗯...我希望有人能提供一个清晰的示例,说明如何使第 3 方 JAR 文件可供 Android-Studio 访问,通过显示生成的“build.gradle”文件的依赖项的确切语法看起来像,在他们添加了“foobar.jar”条目之后。

你知道,比如:

=========

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile 'org.somedevs.foobar:Foobar.jar'
}
Run Code Online (Sandbox Code Playgroud)

=========

[否则,我连滚雪球的机会都无法猜测到目前为止发布的答案的真正含义。我的 INTITAL 子句包含单个“编译”行...所以我猜应该添加另一行这样的行!?!?]

编辑:是的,非常感谢,叛逆!我现在也可以使用了。[将 JAR 复制到该库后,我只需右键单击 Studio 中的“库”并选择“添加为库...”即可获得更可靠的结果,而不是“拖/放”到 Studio 中的“库”上位置,使用命令行。]

依赖项子句的正确形式如下所示:

 dependencies {
        compile 'com.android.support:support-v4:13.0.+'
        compile files ('libs/Foobar.jar')
    }
Run Code Online (Sandbox Code Playgroud)