Ron*_*ger 109 android android-studio
我阅读了许多线程如何将*.so库添加到Android Studio,但它们都不起作用,特别是当涉及到文本点时:这不适用于较新的xxx(Android Studio,gradle,...)
我们能否重新开始吧.我有:
Android Studio 0.6.0
从项目结构我看到:
SDK位置:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Run Code Online (Sandbox Code Playgroud)
项目:
Gradle version 1.10
Android Plugin Version 0.11.+
Run Code Online (Sandbox Code Playgroud)
模块/应用程序:属性:
编译Sdk版本19构建工具版本19.1.0
依赖关系:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Run Code Online (Sandbox Code Playgroud)
我得到了预先编译的*.so文件,并且在演示应用程序中它们正在运行.我必须更改应用程序的源代码,因此我需要使用相同的*.so文件进行重建.
Vas*_*nth 209
在Android Studio 1.0.2中添加.so库
nen*_*ick 90
现行解决方案
创建该文件夹project/app/src/main/jniLibs,然后将您的*.so文件放在该位置的abi文件夹中.例如,
project/
???libs/
| ??? *.jar <-- if your library has jar files, they go here
???src/
??? main/
??? AndroidManifest.xml
??? java/
??? jniLibs/
??? arm64-v8a/ <-- ARM 64bit
? ??? yourlib.so
??? armeabi-v7a/ <-- ARM 32bit
? ??? yourlib.so
??? x86/ <-- Intel 32bit
??? yourlib.so
Run Code Online (Sandbox Code Playgroud)
不推荐的解决方案
将模块gradle.build文件中的两个代码段添加为依赖项:
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
Run Code Online (Sandbox Code Playgroud)
如何创建这个自定义jar:
task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
Run Code Online (Sandbox Code Playgroud)
相同的答案也可以在相关的问题中找到:在Android工作室的apk中包含.so库
Ram*_*ash 25
*.so Studio中的库
您必须在android Studio项目中的main中生成jniLibs文件夹,并将所有.so文件放入其中.您还可以在build.gradle中集成此行
compile fileTree(dir: 'libs', include: ['.jar','.so'])
It's work perfectly
|--app:
|--|--src:
|--|--|--main
|--|--|--|--jniLibs
|--|--|--|--|--armeabi
|--|--|--|--|--|--.so Files
This is the project structure.
Gui*_*gis 21
解决方案1:创建JniLibs文件夹
在您的应用程序中创建一个名为"jniLibs"的文件夹,并在里面包含您的*.so文件夹.需要在与"Java"或"Assets"文件夹相同的文件夹中创建"jniLibs"文件夹.
解决方案2:修改build.gradle文件
如果您不想创建新文件夹并将*.so文件保存到libs文件夹中,则可以!
在这种情况下,只需将您的*.so文件添加到libs文件夹中(请尊重与解决方案1相同的体系结构:例如libs/armeabi/.so)并修改应用程序的build.gradle文件以添加源目录的jniLibs.
sourceSets {
main {
jniLibs.srcDirs = ["libs"]
}
}
Run Code Online (Sandbox Code Playgroud)
您将获得更多解释,屏幕截图可以帮助您(步骤6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
编辑它必须是jniLibs.srcDirs,而不是jni.srcDirs - 编辑代码.该目录可以是指向项目目录外部的[相对]路径.
小智 12
这是我的build.gradle文件,请注意该行
jniLibs.srcDirs = ['libs']
Run Code Online (Sandbox Code Playgroud)
这将包括libs的*.so文件到apk.
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
Run Code Online (Sandbox Code Playgroud)
Android NDK 官方hello-libsCMake 示例
刚刚在 Ubuntu 17.10 主机、Android Studio 3、Android SDK 26 上为我工作,所以我强烈建议您将项目基于它。
共享库被调用libgperf,关键代码部分是:
hello-libs/app/src/main/cpp/CMakeLists.txt:
// -L
add_library(lib_gperf SHARED IMPORTED)
set_target_properties(lib_gperf PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libgperf.so)
// -I
target_include_directories(hello-libs PRIVATE
${distribution_DIR}/gperf/include)
// -lgperf
target_link_libraries(hello-libs
lib_gperf)
Run Code Online (Sandbox Code Playgroud)android {
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['../distribution/gperf/lib']
Run Code Online (Sandbox Code Playgroud)
然后,如果您查看/data/app设备下方,libgperf.so也会在那里。
在 C++ 代码上,使用: #include <gperf.h>
标题位置: hello-libs/distribution/gperf/include/gperf.h
库位置: distribution/gperf/lib/arm64-v8a/libgperf.so
如果只支持部分架构,请参阅:Gradle Build NDK target only ARM
示例 git 跟踪预构建的共享库,但它还包含实际构建它们的构建系统:https : //github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
| 归档时间: |
|
| 查看次数: |
168825 次 |
| 最近记录: |