Android Studio 3.0 개발 디 버 깅 안 드 로 이 드 NDK 의 C++코드 상세 설명

7637 단어 AndroidStudioNDK
본 고 는 안 드 로 이 드 스튜디오 3.0 개발 디 버 깅 안 드 로 이 드 NDK 의 C++코드 를 소개 하고 다음 과 같이 공유 합 니 다.
새 항목
새 항목,Include C++Support 옵션 이 발견 되 지 않 았 습 니 다.기억 에 이 옵션 이 있 었 기 때문에 한참 을 찾 았 지만 찾 지 못 했다.

나중에 본의 아니 게 창 크기 를 끌 어 내 렸 는데 숨 어 있 었 군요.정말 구덩이 입 니 다.

새 테스트 항목 을 만 들 고 Include C+Support 옵션 을 선택 하여 프로젝트 에 어떤 차이 가 있 는 지 봅 니 다.
1、gradle
먼저 gradle 파일 을 보고 안 드 로 이 드 노드 에 추가 합 니 다.

externalNativeBuild {
 cmake {
 path "CMakeLists.txt"
 }
}
defaultConfig 노드 에 추가:

externalNativeBuild {
 cmake {
 cppFlags "-std=c++14"
 }
}
2、CPP
자바 노드 와 같은 등급 에 cpp 노드 가 하나 더 생 겼 습 니 다.해당 디 렉 터 리 는 src\main\\cpp 입 니 다.src\main\자바 와 같은 등급 입 니 다.기본 값 은 native-lib.cpp 파일 만 있 고.mk 파일 및 기타 가 없습니다.비교적 간단 합 니 다.

#include <jni.h>
#include <string>
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_bigsing_myapplication_MainActivity_stringFromJNI(
 JNIEnv *env,
 jobject /* this */) {
 std::string hello = "Hello from C++";
 return env->NewStringUTF(hello.c_str());
}
3、CMakeLists.txt
app 디 렉 터 리 에 CMakeLists.txt 파일 이 하나 더 생 겼 습 니 다.

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
  native-lib
  # Sets the library as a shared library.
  SHARED
  # Provides a relative path to your source file(s).
  src/main/cpp/native-lib.cpp )
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( # Sets the name of the path variable.
  log-lib
  # Specifies the name of the NDK library that
  # you want CMake to locate.
  log )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
   native-lib
   # Links the target library to the log library
   # included in the NDK.
   ${log-lib} )
그 중에서 native-lib 는 최종 생 성 된 SO 의 이름(libnative-lib.so)이 고 기본 CPU 는 armeabi-v7a 입 니 다.
기본 프로젝트 속성 은 설정 하지 않 아 도 됩 니 다.debugger 는 기본적으로 auto 가 자동 으로 어 울 립 니 다.cpp 에서 인 터 럽 트 를 하고 디 버 깅 방식 으로 App 을 실행 하면 자동 으로 끊 기 며 변수 수 치 는 디 버 깅 상태 에서 볼 수 있 습 니 다.

NDK 에 대한 AndroidStudio 의 디 버 깅 지원 을 사용 해 보 았 습 니 다.그래서 과거의 프로젝트 도 지원 하려 고 합 니 다.방법 은 다음 절 을 보십시오.
2.기 존 항목
1.C+디 버 거 LLDB 설치
안 드 로 이 드 스튜디오 가 네 이 티 브 코드 를 디 버 깅 한 적 이 없 었 기 때문에 인터넷 에 서 는 안 드 로 이 드 스튜디오 디 버 깅 NDK 에 LLDB 플러그 인 이 필요 하 다 는 것 을 알 게 되 었 습 니 다.기본적으로 없 기 때문에 수 동 으로 설치 하 십시오.
여기 에는 다른 방법 이 있 습 니 다."Edit Configurations"는 프로그램 설정 을 열 고 debugger 에서 Native(기본 값 auto)를 선택 한 다음 App 을 실행 합 니 다.프로젝트 전에는 자바 코드 만 있 었 기 때문에 Native 를 선 택 했 습 니 다.AndroidStudio 는 C++디 버 거 가 설치 되 어 있 지 않 음 을 알려 줍 니 다.알림 에 따라 설치 하면 됩 니 다.

설 치 된 디 버 거 는 LLDB 임 을 알 수 있다.

2、Link C++ Project with Gradle
오래된 항목 에 NDK 지원 을 추가 합 니 다.항목 선택 메뉴 를 오른쪽 단추 로 누 를 수 있 습 니 다:Link C+Project with Gradle

컴 파일 방식 은 두 가지 가 있 습 니 다.CMake 와 ndk-build 입 니 다.그 중에서 ndk-build 는 전통 적 인 방식 입 니 다.AndroidStudio 는 기본적으로 CMake 방식 을 추천 합 니 다.이것 은 앞으로 의 주류 방식 일 수도 있 습 니 다.그래서 우 리 는 기본 적 인 CMake 를 선택 합 니 다.

그 다음 CMakeLists.txt 파일 의 경 로 를 지정 합 니 다.새 항목 의 CMakeLists.txt 파일 을 기 존 항목 의 app 디 렉 터 리 에 복사 하여 proguard-rules.pro 와 같은 폴 더 에 두 면 됩 니 다.그리고 이 CMakeLists.txt 파일 의 전체 경 로 를 입력 하고 OK 를 누 르 십시오.
이 때 gradle 파일 이 자동 으로 추 가 된 것 을 발견 할 수 있 습 니 다:

externalNativeBuild {
 cmake {
 path "CMakeLists.txt"
 }
}
그러나 C++버 전 은 지정 되 지 않 았 습 니 다.새 항목 의 내용 을 참고 하여 수 동 으로 추가 할 수 있 습 니 다.

externalNativeBuild {
 cmake {
 cppFlags "-std=c++14"
 }
}
3.C+소스 코드 를 정리 하 는 파일 조직 형식
새 cpp 디 렉 터 리:src\main\cpp,src\main\자바 와 같은 등급 으로 C+소스 파일 을 디 렉 터 리 로 이동 시 키 고 질서 있 게 구성 합 니 다.
4.CMakeLists.txt 수정
복 제 된 demo 프로젝트 의 CMakeLists.txt 파일 이기 때문에 간단 하고 기 존 프로젝트 를 만족 시 킬 수 없 으 므 로 수정 이 필요 합 니 다.여기 서 자주 사용 하 는 몇 가지 기능 을 말씀 드 리 겠 습 니 다.
-다른 접미사 파일(예:S 어 셈 블 리 파일)을 컴 파일 가능 한 원본 파일 로 설정 합 니 다.

set_property(SOURCE src/main/cpp/art/art_quick_dexposed_invoke_handler.S PROPERTY LANGUAGE C)
여러 개의 정 해 지지 않 은 원본 파일 을 설정 합 니 다(즉,*별표 어댑터 를 사용 하 는 방식 입 니 다).

file(GLOB native_srcs "src/main/cpp/*.cpp" "src/main/cpp/dalvik/*.cpp" "src/main/cpp/art/*.cpp" "src/main/cpp/art/*.S")
add_library( # Sets the name of the library.
  native-lib
  # Sets the library as a shared library.
  SHARED
  # Provides a relative path to your source file(s).
  ${native_srcs}
  )
3 자 SO 라 이브 러 리 파일 연결(예 를 들 어 3 자의 libsubstrate.so 라 이브 러 리 를 사용 하여 테스트 해 야 합 니 다):

file(GLOB libs src/main/cpp/3rd/libsubstrate.so src/main/cpp/3rd/libsubstrate-dvm.so)
target_link_libraries( # Specifies the target library.
   native-lib
   # Links the target library to the log library
   # included in the NDK.
   ${libs}
   ${log-lib} )
5.debugger 를 기본 auto 로 복원 합 니 다.
"Edit Configurations"프로그램 설정 을 열 고 debugger 에서 auto 를 선택 하 십시오.이전에 Native 로 수정 되 었 기 때 문 입 니 다.이렇게 하면 자바 코드 든 C+코드 든 모두 디 버 깅 할 수 있다.
3.총화
C++코드 에 대한 동적 디 버 깅 을 지원 할 수 있 는 것 은 매우 강력 한 기능 임 에 틀림없다.관건 은 현재 AndroidStudio 가 C+코드 를 편집기 에서 도 잘 지원 하기 때문에 전체적으로 이전 을 권장 하 는 것 이다.
부족 한 것 은 컴 파일 속도 가 너무 느 려 서 VisualStudio 를 컴 파일 한 지 초 만 에 완성 할 수 있 습 니 다.AndroidStudio 는 10 초,심지어 더 길 어야 합 니 다.디 버 깅 할 때 LLDB 를 시작 하 는 것 도 느 리 고 Starting LLDB server 에 계속 걸 릴 때 도 있 습 니 다.
VS 와 이 방법 을 결합 하여 사용 하 는 것 을 권장 합 니 다.디 버 깅 이 필요 할 때 AndroidStudio 로 디 버 깅 합 니 다.C+코드 만 컴 파일 하면 VS,VS 방법 을 사용 할 수 있 습 니 다VisualStudio 를 사용 하여 효율 적 인 개발 디 버 깅 AndroidNDK
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기