5

我有一个本地库

/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。

谢谢!斯文

4

5 回答 5

6

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

只是做了一些改变,使它更干净。

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

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

把它放在你的 libs 文件夹中,然后使用compile files('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 进行构建,但它只是解压缩您添加的文件,保留其结构。

于 2013-07-18T17:27:52.727 回答
4

使用外部 jar 库

  1. 将 jar 放入 libs 文件夹/将文件从文件资源管理器拖到 libs
  2. 右键单击它并选择Add as library
  3. 确保它compile files('libs/your_jar.jar')在您的 build.gradle 文件中

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

    对我来说,有必要改变

    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')
    }
    

    在此处输入图像描述

  4. 点击菜单Rebuild Project下方。Build

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

于 2013-07-18T22:20:00.063 回答
2

在 'app/src/main/' 中创建一个名为 'jniLibs' 的目录并放入所有 .so

app/src/main/jniLibs/
|---- armeabi-v7a/your.so
|---- armeabi/your.so
|---- x86/your.so
于 2014-11-24T11:38:23.600 回答
1

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

你知道的,比如:

=========

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

=========

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

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

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

 dependencies {
        compile 'com.android.support:support-v4:13.0.+'
        compile files ('libs/Foobar.jar')
    }
于 2013-07-18T22:04:06.860 回答
0

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


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

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

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

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

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

于 2013-07-08T12:48:32.357 回答