我在
中有一个本机库/ 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! 斯文
答案 0 :(得分:6)
我发现来自用户this的Assaf 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库
Add as library
确保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')
}
点击Rebuild Project
菜单下的Build
。
我今天这样做是为了让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)
你知道,比如:
======
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支持库中一样在项目中引用它。settings.gradle
来定义模块。 (有关详细信息,请参阅docs。)在我这边,我更喜欢构建aar
文件,因为它更模块化。