Android Studio 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.txtapp 디 렉 터 리 에 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.