[Nationales Geheimnis] Kompilierungsprozess der Android-Bibliothek von Libcurl und ausführliche Erklärung

I. Übersicht

Ziel dieses Artikels ist es, den Kompilierungsprozess und die Verwendung der Android libcurl National Secret Library ausführlich zu erläutern. Der
National Secret Algorithmus (SM2/SM3/SM4) ist ein kryptografischer Algorithmusstandard, der von der State Cryptography Administration of China herausgegeben wird. Verwenden Sie libcurl Bibliothek, da es sich um eine weit verbreitete Netzwerkübertragungsbibliothek handelt, die mehrere Protokolle unterstützt. Sie müssen daher die libcurl-Bibliothek in Kombination mit dem nationalen Geheimalgorithmus verwenden, um eine nationale geheime Kommunikation zu erreichen ~

Ok, lass uns gehen

2. Kompilierungsprozess

Die Umgebung des Autors:
Windows-Version: Windows 10
Android NDK-Version: r21 oder höher

1. Bereiten Sie die Umgebung vor

确保已安装 Android NDK,设置好ANDROID_NDK_HOME环境变量(此处不再赘述,基本功哈...)

2. Besorgen Sie sich den GmSSL-Quellcode

git clone https://github.com/guanzhi/GmSSL.git

3. Kompilieren Sie GmSSL

Geben Sie zuerst den Ordner gmssl ein und erstellen Sie dann den Ordner „build-android“. Der Zweck der Erstellung dieses Ordners besteht darin, eine kompilierte Ausgabedatei zu erstellen und diese schließlich auszuführen

./setenv-android.sh

Führen Sie dann den folgenden Befehl aus

make clean
make
make install

ok~ Zu diesem Zeitpunkt ist die Kompilierung von gmssl abgeschlossen.

4. Kompilieren Sie libcurl

git clone https://github.com/curl/curl.git

Geben Sie das Quellcodeverzeichnis von libcurl ein, erstellen Sie einen Kompilierungsausgabeordner und führen Sie den folgenden Befehl aus

cd curl
mkdir build-android
cd build-android

Erstellen Sie eine build.sh-Skriptdatei und kopieren Sie den folgenden Inhalt in die Datei

#!/bin/bash

export ANDROID_NDK_HOME=你的Android_NDK路径
export GmSSL_INSTALL_DIR=你的GmSSL安装目录

API_LEVEL=21
ANDROID_ABI="armeabi-v7a with NEON"
ARCH=arm
PLATFORM=android
TOOLCHAIN=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64

export PATH=${TOOLCHAIN}/bin:$PATH
export CC=${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang
export CXX=${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang++
export AR=${TOOLCHAIN}/bin/arm-linux-androideabi-ar
export LD=${TOOLCHAIN}/bin/arm-linux-androideabi-ld
export RANLIB=${TOOLCHAIN}/bin/arm-linux-androideabi-ranlib

../configure --host=arm-linux-androideabi \
    --enable-static --disable-shared \
    --disable-debug --disable-verbose \
    --disable-curldebug \
    --enable-http --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual \
    --disable-sspi --disable-ntlm-wb --disable-tls-srp \
    --disable-crypto-auth --disable-ntlm --disable-cookies \
    --with-ssl=$GmSSL_INSTALL_DIR \
    --without-zlib \
    --without-ca-bundle --without-ca-path \
    --prefix=$(pwd)/../output/android

make
make install

Geben Sie abschließend dem Skript ausführbare Berechtigungen und führen Sie ~ aus

chmod +x build.sh
./build.sh

Zu diesem Zeitpunkt befindet sich die kompilierte libcurl im Verzeichnis „output/android“~

3. Ausführliche Erklärung

1. Fügen Sie die kompilierte libcurl-Bibliothek und die GmSSL-Bibliothek zum Android-Projekt hinzu:

Kopieren Sie den Include-Ordner der GmSSL-Bibliothek in das Verzeichnis jni des Android-Projekts.
Kopieren Sie die kompilierte libcurl-Bibliothek (libcurl.a) und die GmSSL-Bibliothek (libcrypto.a, libssl.a) in das Verzeichnis jni/libs des Android-Projekts

2. Erstellen Sie eine Android.mk-Datei:
Erstellen Sie eine Datei mit dem Namen Android.mk im jni-Verzeichnis und kopieren Sie den folgenden Inhalt in die Datei:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := gmssl
LOCAL_SRC_FILES := libs/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := libs/libssl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := libs/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := my_native_module
LOCAL_SRC_FILES := my_native_module.c
LOCAL_STATIC_LIBRARIES := curl ssl gmssl
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

3. Lokalen Code schreiben:
In der Datei my_native_module.c können Sie die libcurl-Bibliothek und die GmSSL-Bibliothek für die nationale geheime Kommunikation verwenden. Verwenden Sie beispielsweise eine HTTPS-GET-Anfrage:

#include <jni.h>
#include <string.h>
#include <curl/curl.h>

JNIEXPORT jstring JNICALL
Java_com_example_myapp_MainActivity_sendHttpsRequest(JNIEnv *env, jobject instance) {
    
    
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if (curl) {
    
    
        curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);

        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
    
    
            return (*env)->NewStringUTF(env, curl_easy_strerror(res));
        }

        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return (*env)->NewStringUTF(env, "Request completed successfully.");
}

4. Rufen Sie die lokale Methode im Android-Projekt auf:
Rufen Sie die lokale Methode in MainActivity.java auf, wie unten gezeigt

public class MainActivity extends AppCompatActivity {
    
    
    static {
    
    
        System.loadLibrary("my_native_module");
    }

    public native String sendHttpsRequest();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String result = sendHttpsRequest();
        Log.i("MainActivity", result);
    }
}

Bisher haben Sie die nationale Geheimbibliothek Android libcurl erfolgreich kompiliert und im Android-Projekt für nationale Geheimkommunikation ~ verwendet

Vier, endlich

Wenn Sie Fragen haben, können Sie gerne einen Kommentar abgeben und mich kontaktieren ~

Ich denke du magst

Origin blog.csdn.net/a_Chaon/article/details/130563705
Empfohlen
Rangfolge