- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试开发使用 POCO socket
库和 android NDK
的跨平台应用程序(在 native 级别)。但我不知道如何在工作室中使用 gradle 在 android NDK
中集成/使用 POCO 库
。
我正在使用 com.android.tools.build:gradle-experimental:0.7.0
gradle 版本。以下是我的 build.gradle
。
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.ndkproto"
minSdkVersion.apiLevel = 22
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-android.txt'))
}
}
ndk {
moduleName = "ndk-proto-jni"
stl "stlport_static"
ldLibs.addAll(['android', 'log'])
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
}
我已经下载POCO library但不知道要在 build.gradle
文件中更改什么以在 ndk 中使用其 C++ 函数。我试图在网上搜索,但找不到与此相关的任何 Material 或官方指南。
最佳答案
好吧,我还没有尝试使用 POCO 库,但我成功地使用了非 boost asio 库。看,我做了什么。
将asio文件放到如下目录
java
jni
prebuilt
asio
1.10.6
asio_files_and_directories
openssl
armeabi
include
lib
x86
include
lib
然后我用gradle-experimental plugin
写了build.gradle
:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.0'
}
}
apply plugin: 'com.android.model.library'
import org.gradle.internal.os.OperatingSystem;
final APP_ABIS = ["x86", "armeabi"]
model {
repositories {
libs(PrebuiltLibraries) {
openssl {
binaries.withType(SharedLibraryBinary) {
if (targetPlatform.getName() == "armeabi" || targetPlatform.getName() == "x86") {
headers.srcDir file("src/main/prebuilt/openssl/${targetPlatform.getName()}/include")
sharedLibraryFile = file("src/main/prebuilt/openssl/${targetPlatform.getName()}/lib/libssl_1_0_0.so")
}
}
}
opencrypto {
binaries.withType(SharedLibraryBinary) {
if (targetPlatform.getName() == "armeabi" || targetPlatform.getName() == "x86") {
headers.srcDir file("src/main/prebuilt/opencrypto/${targetPlatform.getName()}/include")
sharedLibraryFile = file("src/main/prebuilt/openssl/${targetPlatform.getName()}/lib/libcrypto_1_0_0.so")
}
}
}
}
}
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
minSdkVersion.apiLevel 16
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0"
}
}
android.sources.main {
jni {
source {
srcDir file("src/main/jni")
}
exportedHeaders {
srcDir file("src/main/prebuilt/asio/1.10.6/include")
}
dependencies {
library "openssl" linkage "shared"
library "opencrypto" linkage "shared"
}
}
jniLibs {
dependencies {
library "openssl"
library "opencrypto"
}
}
}
android.ndk {
moduleName "ndk_module_with_asio"
cppFlags.add("-std=c++11")
cppFlags.add("-fexceptions")
cppFlags.add("-frtti")
cppFlags.add("-D__STDC_CONSTANT_MACROS")
cppFlags.add("-DASIO_STANDALONE")
abiFilters.addAll(APP_ABIS)
ldLibs.addAll(["android", "log", "m", "z"])
stl "gnustl_static"
}
android.buildTypes {
debug {
minifyEnabled = false
proguardFiles.add(file('proguard-project.txt'))
ndk.with {
debuggable = true
}
}
release {
minifyEnabled = false
proguardFiles.add(file('proguard-project.txt'))
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.guava:guava:19.0'
}
我还有带有 jni 函数的 java 文件来调用我的 native 方法,在应用程序启动时我会调用
try {
System.loadLibrary("ssl_1_0_0");
System.loadLibrary("crypto_1_0_0");
System.loadLibrary("ndk_module_with_asio");
}
catch( UnsatisfiedLinkError ex ) {
System.out.println("Native.java System.loadLibrary error occured: " + ex);
}
如您所见,我已经加载了手动构建的 openssl 版本。但这不是必需的。我添加了它,因为 android openssl 库是旧的并且展示了如何使用 gradle 加载共享库。我希望通过这个示例,您可以加载 POCO 库,或者只使用非 boost asio。
关于android - 在 android ndk 中集成 POCO 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520721/
我想使用 ndk 构建一个 3rd 方库 avahi。 avahi 已经有 android 端口(带有有效的 Android.mk)。 我做了什么: 我已经成功创建了一个项目并将所有源代码复制到 jn
由于不再需要Android NDK,因此我尝试将其卸载。在Eclipse中找到的路径似乎已损坏。我应该如何清理这个烂摊子?我尝试了brew,但它说未安装NDK。 (它甚至告诉我未安装SDK!也许不是通
我是 Android Studio 和 Android NDK 的新手。我正在尝试使用 android NDK 为类分配编译一个简单的 hello.c 程序。我已按照以下项目说明进行操作,但出现错误:
当我尝试执行 NDK 构建时,我收到以下错误列表...有人知道吗? encies\FreeImage/D:/Projects.CPP/Engine5/svn/trunk/Dependencies/Fr
我正在使用 android-ndk-profiler-3.1 为我的项目进行 NDK 分析。我在 Android.mk 中进行了如下更改... LOCAL_PATH := $(call my-dir)
我需要使用 cutils 库和头文件在我的 NDK 项目中实现 ashmem,但我在我的系统中找不到与 cutils 相关的任何内容。它位于何处或从何处获得? 最佳答案 Android“cutils”
我有两个独立的项目,一个项目用于构建 Boost 库,另一个项目从构建的 boost 库中调用。 Boost 项目编译良好并生成 libboost.a 文件。我想要实现的是将此库添加到我的其他 NDK
我在ndk-build clean上遇到以下错误 mo@mo-Toshiba ~/Workspace/AndroidApp/jni/android_programming_driver $ ndk-b
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试使用 NDK(又使用开放 SLES)在 Android 上创建一个基于流的音频应用程序。我已经完成了基本的流媒体设置。我需要知道 Android 中如何处理欠载(或重载)?错误回调是如何实现
我的 Application.mk 设置为构建 arm 以及 x86 共享库: APP_ABI :- armeabi-v7a x86 我有预建的 openssl 静态库: libcrypto_v7a.
我的 $NDK_HOME 文件夹包含标准库的不同实现。 qdii@nomada /opt/android-ndk/platforms $ ls -l total 24 drwxr-xr-x 5 roo
如何安装android-ndk。我已经为 ndk 设置了路径,但在执行“ndk-build”命令时仍然出现错误。 fya 我正在使用 Windows 操作系统。 最佳答案 它对我有用: 打开命令提示符
构建 Android-ndk 时出现以下错误 请帮助我。 Cygwin.bat @echo off set IS_UNIX= set DEV_ROOT=C:/iliu-Android-NDK-Fibo
我开始使用 android ndk (r8c),为此我安装了新版本的 Ubuntu 12.10 (32bit) 问题,无论我尝试构建什么,我都会遇到让我发疯的怪异错误...... ~/workspac
我正在尝试向我的 Android 项目添加 Crashlytics 支持,该项目使用 NDK 和 gradle CMake。这意味着我的共享项目需要符号。所以如果我想为发布版本创建符号,我会调用 gr
我想知道是否有人设法使用 Android NDK(r8d) 的工具链构建了新的 SDL2。 SDL2 似乎非常接近发布(从昨天开始,它不再是“正在 build 中:http://hg.libsdl.o
我试图在“ndk-build”过程中禁用所有警告,以编译与 Android 上的 JNI 一起使用的 CPP 代码。 我正在使用 LOCAL_CFLAGS := -Wno-error没有成功。 有任何
谁能告诉我如何在android(ndk-build)中建立C-ares库 最佳答案 这是使用NDK standalone toolchain将其构建为ARMv7的静态库的方法: export NDK=
我正在尝试从我的 native 代码中读取一个简单的文本文件。 我把file.txt放在assets文件夹下 在我的事件中,我正在创建 Assets 管理器:assetManager = getAss
我是一名优秀的程序员,十分优秀!