Problemas encontrados pelo Android Studio no Mp3Encoder no Guia Avançado para Desenvolvimento de Áudio e Vídeo

Aumentar os problemas encontrados na chamada de código nativo em java em C++

Principais erros:

  1. No diretório do arquivo de classe correspondente, execute o seguinte comando para gerar o arquivo de interface JNI
javah -jni com.phuket.tour.studio.Mp3Encoder

Javah foi abolido na versão superior do java e pode ser substituído por javac atualmente, usando o seguinte código para obter

javac -h 保存的位置 ./Mp3Encoder.java
// ./Mp3Encoder.java是指在当前文件夹内的Mp3Encoder.java,如果不在当前文件夹内自行添加前面的文件名称
  1. Execute o comando ndk-build para compilar a biblioteca so dinâmica.
    O problema aqui é enorme. Existem principalmente 3 erros, todos listados abaixo. A partir do ponto 7, estou há muito tempo procurando informações para resolvê-lo.

Meu fluxograma para cada etapa:

Primeiro você precisa instalar os pacotes que deseja usar

  1. ndk, há muitas informações na Internet, você mesmo pode encontrar
  2. API do Android
  3. Android SDK PT e BU
  4. cmake
    insira a descrição da imagem aqui

insira a descrição da imagem aqui

1. Crie um novo projeto

insira a descrição da imagem aqui
insira a descrição da imagem aqui

2. A primeira e a segunda etapas do livro são criar um arquivo Java e escrever um método local.

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG, __VA_ARGS__)
        Java_com_phuket_tour_mp3encoder_MpeEncoder_encode(JNIEnv * env, jobject obj) {
    
    
    LOGI("encoder encode");
}

insira a descrição da imagem aqui
insira a descrição da imagem aqui

3. Crie a pasta jni

insira a descrição da imagem aqui
Se não houver essa opção, crie um arquivo chamado jni diretamente no main e informe ao build.gradle que ele está no Android.
insira a descrição da imagem aqui

4. Gerar arquivo de interface JNI

insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui

5. Crie um arquivo cpp na pasta cpp

insira a descrição da imagem aqui

6. Crie o arquivo Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES = ./Mp3Encoder.cpp
LOCAL_LDLIBS :=-L$(SYSROOT)/usr/lib -llog
LOCAL_MODULE := jni
include $(BUILD_SHARED_LIBRARY)

insira a descrição da imagem aqui
Um erro será relatado mais tarde e eu direi um a um como corrigir o erro. Primeiro, vamos ver qual erro é relatado:
insira a descrição da imagem aqui
insira a descrição da imagem aqui

7. Três perguntas

  1. Android NDK: APP_PLATFORM não definido. Padronizando para a versão mínima suportada android-16

Solução:
Isso exige que configuremos um Application.mk e defina APP_PLATFORM

APP_STL := c++_static
APP_CPPFLAGS := -frtti -fexceptions -std=c++0x
APP_ABI := armeabi-v7a
APP_PLATFORM := android-16

insira a descrição da imagem aqui
Este erro não será relatado após a execução do ndk-build uma vez.

  1. Android NDK: AVISO: APP_PLATFORM android-16 é superior a android:minSdkVersion 1 in D:/Android_app/mp3encoder2/app/src/main/AndroidManifest.xml. Os binários do NDK não serão compatíveis com dispositivos anteriores ao Android-16.

Solução:
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Isso resolve, execute uma vez
insira a descrição da imagem aquiFonte da segunda solução: https://blog.csdn.net/jiao_mrswang/article/details/79820228

  1. make: *** Nenhuma regra para tornar o alvo 'D:/Android_app/mp3encoder2/app/src/main/jni/./Mp3Encoder.cpp', necessário para 'D:/Android_app/mp3encoder2/app/src/main/obj /local/armeabi-v7a/objs/jni/./Mp3
    Encoder.o'. Parar.

Este problema é causado pelo LOCAL_SRC_FILES = ./Mp3Encoder.cpp neste Android.mk
Nenhuma regra para fazer alvo: a tradução significa que não há regra para criar um alvo, ou seja, este LOCAL_SRC_FILES está errado. Veja o erro e saiba it, Mp3Encoder. O endereço de cpp está errado. Na verdade, está em cpp, não em jni. Ainda não sei como corrigir o erro modificando o valor. Só consigo determinar o arquivo de destino do Android.mk por outros métodos: primeiro
exclua LOCAL_SRC_FILES = ./Mp3Encoder.cpp e depois como mostrado abaixo:
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Em seguida, execute:
insira a descrição da imagem aqui
insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/A_easy_learner/article/details/123296704
Recomendado
Clasificación