[Secret national] Processus de compilation de la bibliothèque Android de Libcurl et explication détaillée

I. Aperçu

Cet article vise à fournir une explication détaillée du processus de compilation et de l'utilisation de la bibliothèque secrète nationale Android libcurl. L'
algorithme secret national (SM2/SM3/SM4) est une norme d'algorithme cryptographique publiée par l'Administration de cryptographie d'État de Chine. bibliothèque, car il s'agit d'une bibliothèque de transmission réseau largement utilisée qui prend en charge plusieurs protocoles, vous devez donc utiliser la bibliothèque libcurl en combinaison avec l'algorithme secret national pour obtenir une communication secrète nationale ~

d'accord, allons-y ~

2. Processus de compilation

Environnement de l'auteur :
Version Windows : Windows 10
Version Android NDK : r21 ou ultérieure

1. Préparer l'environnement

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

2. Obtenir le code source GmSSL

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

3. Compiler GmSSL

Entrez d'abord dans le dossier gmssl, puis créez le dossier 'build-android', le but de la création de ce dossier est de créer un fichier de sortie compilé, et enfin d'exécuter

./setenv-android.sh

Exécutez ensuite la commande suivante

make clean
make
make install

ok~ À ce stade, la compilation de gmssl est terminée ;

4. Compiler libcurl

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

Entrez dans le répertoire du code source de libcurl, créez un dossier de sortie de compilation et exécutez la commande suivante

cd curl
mkdir build-android
cd build-android

Créez un fichier de script build.sh et copiez le contenu suivant dans le fichier

#!/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

Enfin, donnez au script des autorisations exécutables et exécutez ~

chmod +x build.sh
./build.sh

À ce stade, le libcurl compilé sera situé dans le répertoire output/android ~

3. Explication détaillée

1. Ajoutez la bibliothèque compilée libcurl et la bibliothèque GmSSL au projet Android :

Copiez le dossier include de la bibliothèque GmSSL dans le répertoire jni du projet Android
Copiez la bibliothèque compilée libcurl (libcurl.a) et la bibliothèque GmSSL (libcrypto.a, libssl.a) dans le répertoire jni/libs du projet Android

2. Créez un fichier Android.mk :
créez un fichier nommé Android.mk dans le répertoire jni et copiez le contenu suivant dans le fichier :

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. Écrivez le code local :
Dans le fichier my_native_module.c, vous pouvez utiliser la bibliothèque libcurl et la bibliothèque GmSSL pour la communication secrète nationale. Par exemple, en utilisant une requête HTTPS GET :

#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. Appelez la méthode locale dans le projet Android :
appelez la méthode locale dans MainActivity.java, comme indiqué ci-dessous.

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);
    }
}

Jusqu'à présent, vous avez compilé avec succès la bibliothèque secrète nationale Android libcurl et l'avez utilisée dans le projet Android pour la communication secrète nationale ~

Quatre, enfin

Si vous avez des questions, n'hésitez pas à commenter et à me contacter ~

Je suppose que tu aimes

Origine blog.csdn.net/a_Chaon/article/details/130563705
conseillé
Classement