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

时间:2013-07-08 08:34:41

标签: android gradle android-studio

我在

中有一个本机库

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

我更改了gradle构建文件以包含jar文件,这似乎很容易(MYNEWJAR):

dependencies {
    compile files('libs/android-support-v4.jar', 'libs/MYNEWJAR.jar')
}

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

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

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

THX! 斯文

5 个答案:

答案 0 :(得分:6)

我发现来自用户thisAssaf Gamliel回答非常有用。

只是做了一些改动,使它更清洁。

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

foo.zip - &gt;
| - / lib目录
| - | - / armeabi
| - | - | - *所以
| - | - / 86
| - | - | - *所以

将它放在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
    }
}

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

答案 1 :(得分:4)

使用外部jar库

  1. 将jar放入libs文件夹/将文件拖到文件浏览器的libs
  2. 右键单击它并选择Add as library
  3. 确保compile files('libs/your_jar.jar')位于build.gradle文件中

    为此,请修改[projectname] Project - &gt;下的build.gradle。左侧project窗格中的[projectname]。

    对我来说,有必要改变

    dependencies {
        compile 'com.android.support:support-v4:13.0.+'
    }
    

    dependencies {
        compile 'com.android.support:support-v4:13.0.+'
        compile files('libs/universal-image-loader-1.8.5.jar')
    }
    

    enter image description here

  4. 点击Rebuild Project菜单下的Build

  5. 我今天这样做是为了让Universal Image Loader库与我的项目集成。

答案 2 :(得分:2)

创建一个名为&#39; jniLibs&#39;的目录。进入&#39; app / src / main /&#39;并把所有的.so

放进去
app/src/main/jniLibs/
|---- armeabi-v7a/your.so
|---- armeabi/your.so
|---- x86/your.so

答案 3 :(得分:1)

嗯......我正在希望有人会提供一个明确的例子 如何使Android-Studio可以访问第三方JAR文件 显示生成的'build.gradle'文件的确切SYNTAX 依赖条款在他们添加'foobar.jar'之后会看起来像 条目。

你知道,比如:

======

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile 'org.somedevs.foobar:Foobar.jar'
}

======

[否则,我无法忍受雪球的机会 猜测到目前为止发布的答案真的意味着什么。我的 INTITAL子句包含单个'compile'行...所以我的 GUESS那个人应该添加另一条这样的线!?!?]

编辑:是的,非常感谢,叛逆!我现在也有它的工作。 [而不是'拖放'到Studio中的'libs',我有更多  只需右键单击Studio中的“libs”并选择即可获得可靠的结果  将“添加为库...”后,使用cmd-line将JAR复制到该位置。]

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

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

答案 4 :(得分:0)

由于安全原因,无法使用gradle android插件引用应用程序项目中的本地jar / aar文件。


对于支持库,使用Android SDK Manager,您必须安装额外的名为Android Support Repository,这将在maven存储库中公开支持库。然后,您可以通过以下方式在项目中添加支持库:

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
}

对于外部库,您有两种可能性:

  • 构建一个aar文件并将其部署到您当地的maven存储库,然后像在android支持库中一样在项目中引用它。
  • 将库源放在应用程序项目旁边,并在root用户创建一个settings.gradle来定义模块。 (有关详细信息,请参阅docs。)

在我这边,我更喜欢构建aar文件,因为它更模块化。