91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

用ndk制作一個安卓so

發布時間:2020-07-09 12:04:17 來源:網絡 閱讀:300 作者:angel_64 欄目:軟件技術

做個記錄
打開Eclips
File->New->Project
用ndk制作一個安卓so
選擇安卓應用
用ndk制作一個安卓so
填寫名稱mytest2ndk
用ndk制作一個安卓so
然后一路點下去就行,不用選什么,注意不要勾選 Mark this project as a library,生成so的事情在其他地方處理。

然后工程就建好了,接下來右鍵工程選擇Android Tools,再選擇Add Native Support
用ndk制作一個安卓so
給so文件起一個名字。
接下來開始寫java的native方法,這里有2種方法
用ndk制作一個安卓so
一種是直接在MainActivity里面寫,這里不推薦,因為后面會有坑。
所以建議生成一個新的文件,選擇NEW一個CLASS
用ndk制作一個安卓so
修改NativeClass.java內容

package com.example.my2testndk;

public class NativeClass {
    static{
        System.loadLibrary("mytest2ndk");
        }

        public native String getTraceIP(String strace_ip);
}

然后進入工作目錄
在win的cmd命令行里面運行javah -classpath bin/classes -d jni com.example.my2testndk.NativeClass
就可以生成頭文件
用ndk制作一個安卓so
注意如果寫在MainActivity文件里面,這里會報錯不過去,只有把bin/classes改成src或者是絕對路徑,很麻煩,還是建立一個新文件好了。
然后jni目錄下建一個.cpp文件

#include <jni.h>
#include "com_example_my2testndk_NativeClass.h"

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>

char buftext[100] = {0};
const char* getRawSocket(const char* domainIP)
{
    int recvsockfd = -1;

    if ((recvsockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)/*socket(PF_PACKET,  SOCK_DGRAM, htons(ETH_P_ALL))*/)== -1)  //ipdata recv and send
    {
        sprintf(buftext,"error! %d %s\n",errno,strerror(errno));
        return buftext;
    }
    sprintf(buftext,"SOCK_RAW ok!\n");
    return buftext;
}

JNIEXPORT jstring JNICALL Java_com_example_my2testndk_NativeClass_getTraceIP
    (JNIEnv *env, jobject thiz,jstring domainIP) {

    const char* strdomainIP = env->GetStringUTFChars(domainIP, 0);

    return env->NewStringUTF(getRawSocket(strdomainIP));
    }

然后打開Cygwin-Terminal,進入工作目錄
運行$NDK/ndk-build DK_DEBUG=1 -B V=1

有時候會出現 multiple target patterns. Stop.
把obj下面的刪除再編譯就行
編譯成功后,在libs\armeabi下面會出現so。

然后修改MainActivity.java

package com.example.my2testndk;

import android.app.Activity;
import android.os.Bundle;

import android.widget.TextView;

public class MainActivity extends Activity {
    NativeClass nativeClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        setContentView(tv);     
        nativeClass = new NativeClass();
        tv.setText(nativeClass.getTraceIP("8.8.8.8"));
    }
}

這時候我們運行run as/Android application
用ndk制作一個安卓so
顯示權限錯誤,因為安卓不允許調用runsocket這種底層的功能。
看代碼能夠理解,這里是想做一個trace的功能,函數無權限,此路不通。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜州市| 岳池县| 易门县| 丹凤县| 曲沃县| 余干县| 彭泽县| 侯马市| 曲松县| 三亚市| 临沂市| 南通市| 论坛| 文山县| 长岭县| 新沂市| 门头沟区| 鹰潭市| 渑池县| 电白县| 改则县| 察哈| 家居| 滦南县| 杭州市| 吴江市| 盖州市| 阿坝| 清河县| 华坪县| 宁远县| 汝州市| 响水县| 特克斯县| 隆子县| 英德市| 普陀区| 唐山市| 信阳市| 永靖县| 怀远县|