我在svn上有一个GoogleBreakPad的干净签出,我正在尝试使用cygwin for android编译它。然而,进展并不顺利
cd <google-breakpad>
android/run-checks.sh --ndk-dir=<my-ndk-dir> --tmp-dir=$PWD/bin --no-cleanup --no-device --verbose
如果我修改makefile以删除这些警告作为错误选项,则生成会更进一步,但找不到明显存在的文件:
在搜索了很多之后,我仍然找不到一件事,那就是我是否可以在我的.java文件中使用lib***.a
i.e:
static {
// Library
System.loadLibrary("***");
}
当我读到overview.html中的“您必须提供一个本机共享库,其中包含这些方法的实现”一行时,我产生了这个疑问
那么,有人能告诉我是否可以在.java文件中使用lib***.a吗
i.e:
static {
// Library
System.loadLi
我正在尝试遍历资产文件夹中包含的所有文件。要获取工作目录,我使用:AAssetManager\u openDir。然而,仅仅在我的代码中包含这一点就会导致启动时崩溃——android_main甚至都没有看到。有没有人遇到过类似的问题和/或知道如何解决
const char* filename = (const char*)NULL;
const char* dirName = "";
AAssetDir* dir = AAssetManager_openDir(assetManager, dir
标签: Android Ndk
java-native-interface Arm
cross-platformembedded-linux
我有一个程序,我使用NDK中的arm工具链编译。现在我想把它用作图书馆;将它放在JNI文件夹中,并从我的主要活动调用函数。我想知道如何高效、明智地进行这项工作。我将所有文件和文件夹复制到JNI文件夹。我该如何处理本机C代码中的make文件?我可以修改它们以适应JNI设置吗?有人能帮我解决哪些问题吗?注意,我的问题不是移植本机代码,而是如何有效地进行移植。我想弄清楚IDE中是否有任何自动化工具可以帮助我做到这一点
现在,我得到了以下错误,我相信这告诉我,我复制的旧make文件没有生成项目所需的文件
我有一个项目结构如下。我只想用SQLite源代码构建一个静态库,但出于某种原因,当我运行ndk build时,它也会构建其他源代码——就好像它在其他位置包含了Android.mk文件一样
jni/SQLite
jni/SQLite/Android.mk (the only .mk file that I want to build)
jni/TT
jni/Application.mk
jni/Android.mk (for building everything such as SDL2)
我构建了libssl.a和libcryto.a。但是当我想将我的.so链接到它时,我得到了以下错误:
Error:(130) undefined reference to 'BIO_new_dgram'
如果我删除这个调用,我可以成功编译它
我是否以错误的方式构建了openssl库
BIO_new_dgram在libcrypto.a中:
nm libcrypto.a | grep BIO_new_dgram
0000081c T BIO_new_dgram
我使用以下配置Openssl:
我目前在Linux中用C编译了一组源代码,输出是一个*.o文件,它是一个目标文件。这可能会进行图像压缩。现在我想在Android中使用/测试它
这可能吗?我只尝试过Android NDK开发者端的NDK示例。没有任何关于如何做到这一点的参考资料
提前感谢,,
Perumal您不运行对象代码文件*.o。您需要将其转换为可执行文件。为此,假设您使用的是GCC,您将运行GCC file1.o file2.o-o executable,它将一个包含file1.o和file2.o的双文件程序转换为一个名为
我一直在用AndroidNDK构建一个共享库,现在想将其构建为一个静态库。我以为我所要做的就是在Android.mk中将BUILD\u SHARED\u LIBRARY更改为BUILD\u STATIC\u LIBRARY,但现在当我运行ndk BUILD时,绝对没有发生任何事情。它直接返回到命令提示符,不显示任何内容。我尝试了ndk build-n,它显示了正在执行的3个rm命令,其他什么都没有。我尝试了ndk build-B,结果没有什么不同。我尝试了ndk build-d,但输出中没有与源
嗨,我有一个c函数
int main(int argc, char *argv[])
我的wrapper.c有这个函数
JNIEXPORT jint JNICALL Java_package_Class_lameMain(JNIEnv *env, jclass class, jint argc, jcharArray argv) {
return main(argc, argv);
}
在java中,我这样定义它
private native int lameMain(int arg
标签: Android Ndk
java-native-interfaceandroid-5.0-lollipop
--编辑--
由于构建不明确,共享库的版本太多了。gradle
./src/main/jniLibs/armeabi-v7a/libaudioboo-native.so
rob@ app$ rm ./src/main/libs/armeabi-v7a/libaudioboo-native.so
rob@ app$ rm ./src/main/obj/local/armeabi-v7a/libaudioboo-native.so
rob@ app$ rm ./src/main/jniLibs/ar
在将库项目构建从Android.mk转换为CMakeLists.txt时,我遇到了避免未定义引用的问题。我正在使用一个名为和编译DCMTK的开源项目,并将其链接到静态库中。当我将每个静态库添加到目标链接库时,使用Android.mk通过ndk build进行构建,并使用gradle和以下CMakeLists.txt进行构建。但是,我想使用add_library来完成这项工作,并尝试了
add_library( lib_dcmdata STATIC IMPORTED )
set_target_pr
因此,我构建了一个Android aar库,其中包含一个本机库(libnative lib.So)。出于向后兼容性考虑,它只针对armeabi和x86体系结构构建
现在,我将aar文件放在我的“客户端”应用程序中使用,我可以清楚地看到libnative-lib.so位于aar的jni/armeabi和jni/x86文件夹下
但应用程序崩溃时显示以下消息:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/l
而我的垃圾箱路径是
c:\cygwin\bin
试试这个:
#include<iostream>
using namespace std;
int main()
{
cout<<"I am stuck here, please do some thing for Me !";
return 1;
}
#包括
使用名称空间std;
int main()
{
CUT< P>从标题IOSWATH .H中删除“.h”,因为现在,H形式从C++库中被剔除,
我有一个共享库文件,faceblaster engine.so,是为arm linux AndroidABI编译的,放在Android Studio的jniLibs文件夹中。我在jni文件夹中还有一个简单的cpp文件
我的库是用Rust编写的,所以我没有头文件,我想通过cpp文件调用其中的函数,但似乎无法使库正确链接。为了测试,我制作了一个简单的函数:
生锈
#[no_mangle]
pub extern fn rust_test() -> c_int {
82 as c_int
我有一个jobject(ts),我想得到它的最后一个字符,然后比较它是否等于0或s(它是数字和字符的混合体)。最简单的方法是什么
jmethodID methodId_ts = env->GetMethodID(s_clazz,"toCharsString","()Ljava/lang/String;");
jobject ts = env->CallObjectMethod(signature,methodId_ts);
只需使用ts.charAt(ts.length()-1):
环境:
编译器:android-ndk-r21b,api 24
Ubuntu 20.04
油嘴滑舌2.66
我已经构建了iconv,并成功地使用make构建了glib 2.56,现在我尝试使用meson构建glib 2.66,我构建我运行以下脚本:
OUTDIR=$HOME/work/ndk/builddir/out
CC=arm-linux-androideabi-gcc CFLAGS="-L$OUTDIR/lib -I$OUTDIR/include" LDFLAGS=&q
以下是我的实际结构示例:
brCore (Core elements, Manager (Singletons), Logger (Singleton) ect.) STATIC
brGrapics (Generic graphics) uses brCore STATIC
brOpenGLES (GLES renderer) uses brCore, brGraphics DYNAMIC
我的Android应用程序(也是动态的)使用这三个库,并在启动时动态加载brOpenGL
我构建了AOSP树的eng风格并安装在一个设备上。我喜欢一步一步地浏览模块的代码(比如libinput.so)。我想用作为CFLAGS一部分传递的“-O0-g”来构建这个模块。但是我不想更改这个模块的Android.mk文件
假设此模块位于aospath/frameworks/base/service/input。
在寻源build/envsetup.sh之后,我将cd刻录到此文件夹
我尝试了“mm-B LOCAL\u STRIP\u MODULE=false”。当我跨过EclipseGDB时,
只是想知道这里什么是最佳的,因为没有任何建议是在报告中提出的。我相当肯定,虽然bufSize属于size\u t类型,但指定size\u MAX可能不是明智的选择 如果您的文件很小(这是主观的,但对我来说,小文件小于512kb),您可以做的是:
AAsset* file = AAssetManager_open(assetManager, "your/file.ext", AASSET_MODE_BUFFER);
size_t fileLength = AAsset_getLength(file
我的Android应用程序正在使用定义Android_应用程序结构的
此结构的成员是android_app.window,源代码注释对此有如下说明:
// When non-NULL, this is the window surface that the app can draw in.
ANativeWindow* window;
从我的Google Play开发者控制台崩溃报告来看,当我处理一个APP_CMD_INIT_window命令时,我看到在这个窗口指针为零的地方有很多崩溃
没有设
我正在尝试创建一个静态库,它将链接到第三方静态库。
目前我收到的错误是
没有规则使libqqrcAPI.a需要目标“…/libqqrcLib.a”
通过更新到新版本的NDK解决了这个问题,NDK支持使用预构建库(5b)
以下是我正在使用的Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := qqrcLib
LOCAL_SRC_FILES := libqqrc.a
LOCAL_EXP
我有一个游戏,它使用std::wstring作为它的基本字符串类型,在上千个地方使用wchar\u t及其函数进行操作:wcsicmp()wcslen()vsprintf(),等等
问题是R5c中不支持wstring(写入时的最新ndk)
由于国际化的原因,我无法将代码更改为使用std::string,我将破坏许多游戏使用的游戏引擎
我有哪些选择
1-用我自己的字符串类替换字符串和wstring
这将给我更好的平台独立性,但重新实现轮子是荒谬的。
我已经开始使用字符串的COW实现。我需要它是CO
抱歉,这个对象看起来有点泛化,但我没有Android NDK开发经验,我正在尝试将java方法转换为本机代码,我遇到了一些问题
原始Java代码不是我的,而是从开源库中获取的
我感觉我在做一些与记忆和处理物体的方式有关的错误的事情
i_out是从Java传入的对象,我在其中从本机方法内部设置了一些值
这是Android Java代码中定义的方法签名:
private native int nativeXLineToRle(int i_x, int i_y, int i_len, int i_th
我正试图通过Android NDK打开一个现有的Mp3文件,但它无法打开
爪哇
C
if((res=avformat\u open\u输入(&pFormatCtx,path,NULL,NULL))
因为我们的应用程序使用Gnu STL,而libRScpp\u是静态的
,
我认为这是因为这些STL实现之间的二进制不兼容
如何将RenderScript与Gnu STL一起使用
NB:无法切换到STLport
更新:针对动态库(libRScpp.so)的链接似乎解决了问题。我不知道为什么,如果可能的话,我们更愿意静态链接
更新:libRScpp.so已在NDK r9d中删除。我已经求助于编译一个我自己的共享库,它与STLport静态链接,并且不公开STL/RenderScript符号。我也有同样
我正在尝试使用GYP为OSX上的AndroidNDK生成iOS/OSXXXcode项目和Makefile(或Android.mk)。生成Xcode项目非常棒,一点问题都没有。但是对于Android,我不知道该怎么做
TOOLCHAIN=/usr/local/Cellar/android-ndk/r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86/bin/arm-linux-androideabi \
CC=$TOOLCHAIN
我已将我的NDK build Application.mk配置为针对目标x86_64进行构建,并将APP_ABI配置如下
APP_ABI:=x86_64
当我使用此命令运行NDK构建时,会出现如下错误:
Android NDK:NDK应用程序“本地”目标未知ABI:x86_64
Android NDK:请在Application.mk中应用ABI定义
我正在Linux x86_64机器上运行构建。有没有解决这个问题的建议?我是否需要进行一些设置/配置NDK以生成x86_64。请参阅
您的设置是x
看起来ndk build在复制时会删除调试符号。所以从obj到lib文件夹。有没有办法告诉ndk build不要删除调试符号?在您的Android.mk中,您可以覆盖cmd strip来执行您想要的操作,例如,什么都不做:
# Don't strip debug builds
ifeq ($(APP_OPTIM),debug)
cmd-strip :=
endif
添加到Application.mk为我解决了这个问题:
APP_STRIP_MODE := none
因此,采纳@Mi
我正在尝试为android编译ncurses并构建ncurses静态库。但是我不知道该怎么做。有人知道如何使用ndk build吗?你需要一个Android.mk,Github上有一些旧的
我正在编写一个在Android上真正需要libev(而不是libevent)的程序。我用谷歌搜索了很多次,想知道如何建立libev,但都没有成功。
谁能告诉我,如何在android上构建libev。非常感谢。你成功了吗?我也遇到了同样的问题,试图在Android的本地应用程序上使用它(在Ubuntu上工作)。这篇文章给了我一些启示:
它可能对你有用。我试过独立案例。无论如何,我还是不能让它工作
我在主Android.mk文件中有几个静态库,它们聚合成一个动态库(.so)。。。因此,所有内容都在编译时不会发出警告,但当我尝试启动应用程序时,会出现以下错误:
Cannot load library: reloc_library[1315]: 226 cannot locate '_ZNSt12__node_alloc13_M_deallocateEPvj'...\n
看起来函数来自stl,但my application.mk包含
APP_STL := stlport_static
我在Android NDK上使用PCM缓冲队列在OpenSL ES中创建了一个多声道音频系统。我似乎无法让操作系统支持SL_IID_RATEPITCH和SL_IID_VOLUME,尽管Android文档称支持这两个接口。下面是我的初始化代码。我做错什么了吗
static SLresult InitChannel(int i)
{
SLresult lRes;
OpenSLChannel *channel = &sndc[i];
// Initialize stu
我无法在Eclipse3.8中的NDK项目中使用.c文件。考虑下面的代码:
#include <jni.h>
JNIEXPORT void JNICALL Java_com_atd_ndkdemo_NDKDemo_charManip(JNIEnv* env, jobject obj, jcharArray chrs)
jchar* cchar0 = GetCharArrayElements(chrs, 0);
jchar* cchar1 = (*env)->
我的问题是:是否可以用我的本机代码(.cpp文件)打开另一个Android应用程序,或者我必须将它们放在java端(.java文件)中?如果我必须在.java文件中完成,我应该把它放在哪里?我总是在VisualStudio中使用.cpp文件,在Android Studio上使用cmd编译并使用emulator运行,我从来没有在Android Studio中使用cocos2d-x生成的.java文件,引擎只是为我准备了一切,所以我在这里有点困惑
更新1:
Abhishek Aryan的建议有效,但
使用Android NDK r18b(使用clang工具链)和Android Studio 3.2.1
mymylib.gradle的相关部分:
task ndkBuild(type: Exec) {
commandLine "${ndkDir}/ndk-build${ndkExt}"
}
我的应用程序.mk:
APP_PLATFORM := android-17
APP_ABI := armeabi-v7a
# APP_OPTIM := release
APP_CFLAGS += -
在gui中,您可以进入设置->关于手机->固件版本并获得2.1版本(或其他版本)。
如何从命令行(或者对于需要在运行时执行此操作的本机应用程序)执行此操作?NDK不在手机上运行,它只是一组工具,可以让您构建将在Android设备上运行的本机库。因此,没有版本检查
唯一的硬要求是使用Android 1.5或更高版本:
Android NDK创建的本机库只能在运行Android 1.5平台版本或更高版本的设备上使用
然而,如果你想使用OpenGL ES API的特定部分,你需要确保你的应用程序运行在
我需要一些自定义宏在我的NDK项目
然而,我没有理想的添加方法,也没有找到答案
有人能帮忙吗?
非常感谢 如果你理解正确,你就需要看看它是如何工作的
你有编写C/C++程序的经验吗?首先,对于应用程序的哪些部分是用本机代码编写的,您应该非常挑剔。此外,您需要记住,当涉及到内存分配等问题时,本机代码的行为将完全不同,因此这真的不是猜测的地方
花些时间了解C/C++,明智地设计应用程序,以便清楚地定义要用本机代码编写的部分,并且不会增加应用程序崩溃的机会。我猜大多数项目都可以不使用本机应用程序部分,
我有一个OpenSL ES函数调用,它在一个应用程序中不会导致问题,但在另一个应用程序中会导致问题,这两个应用程序都运行在同一个设备上
电话是:
result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
如果结果的类型为SLresult,engineObject的类型为slObjectTF
我似乎得到的错误是:
05-19 11:56:27.007: ERROR/libOpenSLES(1425): slCreate
我正在尝试将libxml2与android ndk一起使用。当我运行make文件时,我收到错误消息,说文件“unicode/ucnv.h”不存在。我看到其中一个文件中包含了“unicode/ucnv.h”,但没有这样的头文件。所以我从下载了unicode头文件,并将它们放在include文件夹中
现在前面的错误消失了,但我有这些错误
共享库:libxml2.so
./obj/local/armeabi/objs-debug/xml2/encoding.o: In function `openIc
这就是我在JNI文件夹中执行通配符的方法
include $(CLEAR_VARS)
LOCAL_MODULE := some_module_name
LOCAL_SRC_FILES := $(notdir $(wildcard $(LOCAL_PATH)/*.cpp))
include $(BUILD_SHARED_LIBRARY)
现在我想用foo.cpp和bar.cpp向JNI-somesrc添加新的源文件夹
include $(CLEAR_VARS)
LOCAL_MODULE
我在ubuntu上用android NDK(r8c)构建了ffmpeg 0.8.12(love)。
然后,我通过JNI在另一个android应用程序中使用生成的库
基本上,我想做的是将一个字节流从java传递到我的c jni函数,并使用ffmpeg将其解码到PCM音频缓冲区,然后将其传递回java,以便使用Android的AudioTrack播放。我可以成功地将缓冲区传递给jni(已检查值),ffmpeg似乎正确初始化,但当它尝试解码第一帧时,它在aacdec.c中的aac_decode_fra
我正是遵循着这个原则
编译工作正常,我得到了libffmpeg.so以及几个静态库,如libavcodec.a、libavformat.a等。我复制了jin文件夹中的libffmpeg.so以及其他lib*.a(以防以后使用lib*.a)
然后我在Android ffmpeg应用程序的jni部分使用它。
JNI部分在C++中独立工作。
在Android.mk中,我尝试了不同的设置,但总是有错误。
Android.mk设置为:
LOCAL_PATH := $(call my-dir)
inclu
我正在用本机代码编写一个函数,希望从函数内部了解其他函数如何调用它,因此我决定在我的c代码中使用java.lang.Thread.dumpStack,但似乎不起作用。有人知道其他可能的方法吗?多谢
代码如下:
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
__android_log_print(ANDROID_LOG_INFO, "TIM", "JNI_OnLoad Called");
JNIEn
我想知道为什么这个问题没有正确的答案,我搜索了几个小时却没有找到好答案。
因此,我们在一个团队中工作,在这个团队中,我的朋友编写了一个C库,并将其编译为一个.So文件(称为ttplib.So)(假设我没有访问它的C代码)。现在我必须在我的android应用程序中使用这个.so文件。但我不知道如何加载库以及如何使用它的方法。我有很好的文档。
如果你能告诉我如何创建Android.mk文件,那就太好了。
我必须使用dlopen吗?将ttplib.so放在新项目的libs/armeabi或libs/a
我遵循以下教程
当我在终端中运行ndk build时。我发现以下错误
Compile++ thumb : hello-jni <= hello-jni.cpp
jni/hello-jni.cpp:4:5: error: stray '\342' in program
jni/hello-jni.cpp:4:5: error: stray '\200' in program
jni/hello-jni.cpp:4:5: error: stray '\234' in program
jni
我的决心是这样的:
// ... other standard includes ...
#include <sys/ioctl.h>
#include <linux/fb.h>
//...
struct fb_var_screeninfo fb_var;
int fd = open("/dev/graphics/fb0", O_RDONLY);
ioctl(fd, FBIOGET_VSCREENINFO, &fb_var);
close(fd);
/
以下是CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.4)
project(App)
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(AndroidNdkGdb)
include(AndroidNdkModules)
android_ndk_gdb_enable()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11
我整天都在尝试编译和链接一个足够简单的程序(基本上是一个helloworld示例)。我问过这个库的作者,他告诉我修复我的链接器依赖项。以下是相关信息:
我还尝试使用作者的构建工具进行编译,并将其链接为静态库,但没有成功。我还尝试了STL构建环境的所有变体。是我做错了什么,还是有别的问题
testbgfx.cpp
#include <SDL.h>
#include <bgfxplatform.h>
#include <bgfx.h>
int main(int
我正试图在本地建立一个反应。我按照Facebook的指示从
但是当我执行命令react native run android时,我收到以下错误:
:droid:downloadBoost
无效的cookie头:“Set cookie:sf\u mirror\u trunt=“boost:iweb:boost/1.57.0/boost\u 1\u 57\u 0.zip”;expires=120;Path=/”。无效的“expires”属性:120
:droid:downloadBoost失败
失败
一位开发人员已经在GitHub中发布了代码,供任何想要为SAMP Android(一个允许他们在线玩Android GTA的开发项目)创建服务器的人使用
代码链接:
我想知道使用哪个程序和正确的命令来编译这段代码。据我所知,这是一个NDK构建代码。您可以从阅读NDK指南开始
然后,由于代码使用了旧的ndk生成文件
以及相应的集成示例
1 2 3 4 5 6 ...
下一页 最后一页 共 11 页