溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

NDK怎么制作一個安卓執(zhí)行程序

發(fā)布時間:2022-01-07 21:08:23 來源:億速云 閱讀:183 作者:柒染 欄目:軟件技術(shù)

本篇文章給大家分享的是有關(guān)NDK怎么制作一個安卓執(zhí)行程序,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

怎么在安卓實現(xiàn)tracerout,因為大部分安卓系統(tǒng)都不帶traceroute命令,只能使用ping來實現(xiàn)模擬。
比如ping的-t命令,可以設(shè)置ttl,逐步增加調(diào)試,測試出路由的每一條。
但是效率很低,想用c寫一個方法
我使用ndk做了個so,在里面使用rawsocket實現(xiàn)icmp功能,但是發(fā)現(xiàn)權(quán)限不足,無法建立socket。
查閱資料發(fā)現(xiàn)安卓沒有root權(quán)限是運行不了rawsocket的。

找到了一個方法可以解決
https://blog.csdn.net/Inconsolabl/article/details/50437588
把二進制文件放入用戶空間,然后設(shè)置權(quán)限700
-rwx------ (700) -- 只有屬主有讀、寫、執(zhí)行權(quán)限。
試驗成功,找網(wǎng)上了一個交叉編譯的traceout封在app里面,直接調(diào)用。

最近又需要做一個tcpping的功能,但是沒有找到現(xiàn)成的交叉編譯的二進制程序。其實tcpping就是個握手探測,用java也可以寫。但是java那邊比較忙,我試著寫一個交叉編譯的tcpping。

實現(xiàn)

https://blog.csdn.net/qushaobo/article/details/81089466
參考代碼寫了個例子
但是不能執(zhí)行,顯示
"./data/user/0/com.example.myapplication/files/tcpping": error: Android 5.0 and later only support position-independent executables (-fPIE).
發(fā)現(xiàn)例子代碼是

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{

    fprintf(stderr, "this is a test...\n");

    return 0;
}

使用的是stderr,很可能安卓的權(quán)限很嚴(yán)格,輸出到標(biāo)準(zhǔn)錯誤里也不行,改成printf就ok了。

格式

對例子代碼做了一些兼容性修改
Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tcpping
LOCAL_SRC_FILES := tcpping.cpp

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
    LOCAL_CFLAGS += -D__ARMV7__
    LOCAL_ARM_MODE := arm
else
    LOCAL_ARM_MODE := arm
endif

#兼容5.0+
LOCAL_CFLAGS += -fPIE -fPIC
LOCAL_LDFLAGS += -fPIE -pie

include $(BUILD_EXECUTABLE)

Application.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-14

進行編譯
$NDK/ndk-build DK_DEBUG=1 -B V=1

進入libs目錄,拿到tcpping二進制在3個平臺下的執(zhí)行程序

以上就是NDK怎么制作一個安卓執(zhí)行程序,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

ndk
AI