首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ndk为Android应用程序构建亚行?

如何使用Ndk为Android应用程序构建亚行?
EN

Stack Overflow用户
提问于 2014-12-10 10:41:28
回答 2查看 1.6K关注 0票数 0

我希望使用NDK构建Android亚行,以便在我的项目中可以使用获得的.so,.mk文件如下所示:

代码语言:javascript
复制
# Copyright 2005 The Android Open Source Project
#
# Android.mk for adb
#

LOCAL_PATH:= $(call my-dir)
#adbd device daemon
# =========================================================

include $(CLEAR_VARS)

LOCAL_SRC_FILES := \
adb.c \
fdevent.c \
transport.c \
transport_local.c \
transport_usb.c \
adb_auth_client.c \
sockets.c \
services.c \
file_sync_service.c \
jdwp_service.c \
framebuffer_service.c \
remount_service.c \
usb_linux_client.c

LOCAL_CFLAGS := \
-O2 \
-g \
-DADB_HOST=0 \
-D_XOPEN_SOURCE \
-D_GNU_SOURCE \
-Wall -Wno-unused-parameter -Werror -Wno-deprecated-declarations \

ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
LOCAL_CFLAGS += -DALLOW_ADBD_ROOT=1
endif

LOCAL_MODULE := adbd

LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)

LOCAL_STATIC_LIBRARIES := liblog libcutils libc libmincrypt libselinux
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_EXECUTABLE)

但是我不能用android-ndk-r9c构建它。

这条路可能吗?我该怎么办?

有人能帮我吗?

建造过程中出现的错误是:

代码语言:javascript
复制
jni/adb.c:31:0:
jni/sysdeps.h: In function 'adb_shutdown':
jni/sysdeps.h:363:5: error: implicit declaration of function 'shutdown' [-Werror=implicit-            function-declaration]
jni/sysdeps.h:363:25: error: 'SHUT_RDWR' undeclared (first use in this function)
jni/sysdeps.h:363:25: note: each undeclared identifier is reported only once for each function it appears in
jni/sysdeps.h: At top level:
jni/sysdeps.h:418:81: error: unknown type name 'socklen_t'
jni/sysdeps.h: In function 'adb_socket_setbufsize':
jni/sysdeps.h:453:5: error: implicit declaration of function 'setsockopt' [-Werror=implicit-function-declaration]
jni/sysdeps.h: In function 'unix_socketpair':
jni/sysdeps.h:465:5: error: implicit declaration of function 'socketpair' [-Werror=implicit-function-declaration]
jni/sysdeps.h: In function 'adb_socketpair':
jni/sysdeps.h:472:36: error: 'SOCK_STREAM' undeclared (first use in this function)
In file included from jni/private/android_filesystem_config.h:33:0,
             from jni/adb.c:39:
jni/private/android_filesystem_capability.h: At top level:
jni/private/android_filesystem_capability.h:37:16: error: redefinition of 'struct __user_cap_header_struct'
D:/cygwin/android-ndk-r9c/platforms/android-5/arch-arm/usr/include/linux/capability.h:20:16: note: originally defined here
D:/NDK/android-ndk-r10c/samples/hello-jni/jni/private/android_filesystem_capability.h:40:11: error: conflicting types for 'cap_user_header_t'
D:/cygwin/android-ndk-r9c/platforms/android-5/arch-arm/usr/include/linux/capability.h:23:11: note: previous declaration of 'cap_user_header_t' was here
D:/NDK/android-ndk-r10c/samples/hello-jni/jni/private/android_filesystem_capability.h:42:16: error: redefinition of 'struct __user_cap_data_struct'
D:/cygwin/android-ndk-r9c/platforms/android-5/arch-arm/usr/include/linux/capability.h:25:16: note: originally defined here
D:/NDK/android-ndk-r10c/samples/hello-jni/jni/private/android_filesystem_capability.h:46:11: error: conflicting types for 'cap_user_data_t'
D:/cygwin/android-ndk-r9c/platforms/android-5/arch-arm/usr/include/linux/capability.h:29:11: note: previous declaration of 'cap_user_data_t' was here
D:/NDK/android-ndk-r10c/samples/hello-jni/jni/private/android_filesystem_capability.h:70:0: error: "_LINUX_CAPABILITY_VERSION" redefined [-Werror]
D:/cygwin/android-ndk-r9c/platforms/android-5/arch-arm/usr/include/linux/capability.h:18:0: note: this is the location of the previous definition
D:/NDK/android-ndk-r10c/samples/hello-jni/jni/adb.c:40:28: fatal error: sys/capability.h: No such file or directory
cc1.exe: all warnings being treated as errors

我尝试过在linux中用ndk构建它,在浮子中添加了核标记库之后,一些错误已经解决了,但是重新定义仍然存在,我注释掉了重新定义的结构,但是新的问题出现了:

代码语言:javascript
复制
linux/capability.h:35:10: error:expected '=', ',' , 'j','asm' or'__attribute__' before '*' token } __user * cap_user_header_t

顺便说一句,我真正想要的是运行adb命令,例如,在我的apk.Do中,我需要将整个adbd程序移动到我的项目中?有办法做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-11 09:10:54

这是不可能的,adbd依赖于NDK没有公开的系统库,其中一些库在平台版本之间发生了变化。此外,它需要以适当的权限运行才能正常工作,这是您无法从应用程序中执行的。

票数 0
EN

Stack Overflow用户

发布于 2019-01-02 06:54:54

您可以为android设备构建adb并从源代码中快速启动。

使用此构建脚本,github

在这个回购程序中,您可以看到arm-v7a和arm64的预构建二进制文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27398919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档