我想将Android原生命令行应用程序打包到apk中.我有使用jni/Android.mk的ndk-build构建的应用程序.输出位于libs/armeabi/<MyApp>中.我也有蚂蚁的apk建筑.但是,apk似乎没有拿起命令行应用程序.如果我解压缩apk应用程序不在那里.
我需要做些什么来让ant包含一个预先构建的命令行应用程序?
另外,我需要做什么才能让ant运行ndk-build?(已经回答:使用ANT脚本构建Android NDK)
对于我的本机c ++项目,我将设置预编译共享库的运行时加载,可以在启动时使用配置由客户端更改.什么是在Android上调用dlopen的正确方法?无论我做什么,dlopen永远不会打开任何共享库,如果我没有在我的Android.mk文件中将此库定义为预编译库,如下所示:
LOCAL_PATH := $(call my-dir)
LOCAL_CFLAGS += -DDEBUG
LOCAL_CFLAGS += -DANDROID
include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.cpp
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := native_activity
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += -landroid
LOCAL_SHARED_LIBRARIES := bar
LOCAL_STATIC_LIBRARIES += android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module, android/native_app_glue)
Run Code Online (Sandbox Code Playgroud)
在我的本机活动主类中,我尝试加载库:
void* lib = dlopen("/system/lib/armeabi-v7a/libbar.so", RTLD_NOW);
if (lib == NULL) {
fprintf(stderr, "Could not dlopen(\"libbar.so\"): %s\n",
dlerror());
exit(1);
}else{
LOGI("Library successfully loaded!");
if (dlsym(lib, "bar") == NULL) {
fprintf(stderr, "Symbol …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Playstore 上发布一个包含 .so lib 文件的应用程序。当我尝试调试它时,该应用程序运行良好。但是,当我尝试发布它并通过 .aab 将其上传到 PlayStore 并安装它时,我的应用程序找不到我放入 Jnilibs 文件夹中的 .so 文件。它说
未找到.so 文件
我尝试了很多解决方案(ndk、abifilters、split 等),但没有任何效果。我使用的是 Android Studio 北极狐 2020.3.1 版本。