Gradle을 사용하여 opencv를 사용하는 방법은 무엇입니까?
Android Studio를 사용하여 Gradle 빌드 도구를 사용하여 앱을 개발하고 싶습니다. 에 OpenCV 저장소 및 라이브러리를 삽입 할 수 없습니다 build.gradle. 내 .gradle파일은 다음과 같습니다.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
내 프로젝트에 OpenCV를 어떻게 추가 할 수 있습니까?
Android Studio에서 매우 쉽게 할 수 있습니다.
프로젝트에 Open CV를 라이브러리로 추가하려면 아래 단계를 따르십시오.
libraries프로젝트 기본 디렉터리 아래 에 폴더를 만듭니다 . 예를 들어 프로젝트가 인 경우 폴더를OpenCVExamples생성OpenCVExamples/libraries합니다.SDK "\ OpenCV-2.4.8-android-sdk \ sdk"가있는 위치로 이동하여
java폴더 를 찾고 이름을opencv.이제 SDK의 전체 opencv 디렉토리를 방금 만든 라이브러리 폴더에 복사합니다.
이제 다음 내용으로 디렉토리에
build.gradle파일을 만듭니다.opencvapply plugin: 'android-library' buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.9.+' } } android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 2480 versionName "2.4.8" } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] res.srcDirs = ['res'] aidl.srcDirs = ['src'] } } }애플리케이션의 기본 디렉토리에서 settings.gradle 파일을 편집하고 다음 행을 추가하십시오.
include ':libraries:opencv'프로젝트를 Gradle과 동기화하면 다음과 같이 표시됩니다.

프로젝트를 마우스 오른쪽 버튼으로 클릭 한 다음
Open Module Settings왼쪽 목록에서 모듈 선택을 클릭하고 애플리케이션 모듈을 클릭 한 다음 종속성 탭을 클릭하고 + 버튼을 클릭하여 새 모듈 종속성을 추가합니다.
를 선택하십시오
Module dependency. 선택할 모듈 목록이있는 대화 상자가 열립니다. “: libraries : opencv”를 선택합니다.
크리에이트
jniLibs에서 폴더/app/src/main/위치를하고있는 * .so를 파일 (armeabi, armeabi-V7A, MIPS, 86)와 함께 모든 폴더를 복사jniLibsOpenCV의 SDK에서.
확인을 클릭하십시오. 이제 모든 것이 완료되고 OpenCV로 가서 즐기십시오.
OpenCV 문서 ( 1 )에 따라 OpenCV 관리자를 사용하는 아래 단계 는 프로덕션 실행 을 위해 OpenCV를 사용하는 권장 방법 입니다. 단, OpenCV 관리자 ( 2 )는 Google Play 스토어에서 추가로 설치 한 것입니다. 따라서 자체 포함 APK (OpenCV 관리자를 사용하지 않음)를 선호하거나 현재 개발 / 테스트 단계에있는 경우 https://stackoverflow.com/a/27421494/1180117 에서 답변을 제안 합니다.
OpenCV 관리자와 함께 Android Studio에서 OpenCV를 사용하기위한 권장 단계입니다.
- OpenCV.org에서 다운로드 한 OpenCV Android SDK의 압축을 풉니 다 ( 3 )
- 에서 압축이 풀린 opencv 아카이브의 폴더를
File -> Import Module선택sdk/java합니다. - 업데이트
build.gradle수입 OpenCV의 모듈에서 프로젝트의 일치 4 개 필드를 업데이트하는build.gradleA) compileSdkVersion 나) buildToolsVersion의 C)의 minSdkVersion 4) targetSdkVersion을합니다. - 으로 모듈 종속성을 추가
Application -> Module Settings하고Dependencies탭을 선택 하십시오.+하단 (또는 오른쪽) 아이콘을 클릭Module Dependency하고 가져온 OpenCV 모듈을 선택 하고 선택합니다.
마지막 단계로 Activity 클래스에서 아래 스 니펫을 추가하십시오.
public class SampleJava extends Activity {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch(status) {
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG,"OpenCV Manager Connected");
//from now onwards, you can use OpenCV API
Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
break;
case LoaderCallbackInterface.INIT_FAILED:
Log.i(TAG,"Init Failed");
break;
case LoaderCallbackInterface.INSTALL_CANCELED:
Log.i(TAG,"Install Cancelled");
break;
case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
Log.i(TAG,"Incompatible Version");
break;
case LoaderCallbackInterface.MARKET_ERROR:
Log.i(TAG,"Market Error");
break;
default:
Log.i(TAG,"OpenCV Manager Install");
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
//initialize OpenCV manager
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
}
참고 : method에서 성공 콜백을받은 후에 만 OpenCV 호출을 할 수onManagerConnected 있습니다. 실행 중 아직 설치되지 않은 경우 Play 스토어에서 OpenCV 관리자를 설치하라는 메시지가 표시됩니다. 개발 중에 Play 스토어에 액세스 할 수 없거나 emualtor에있는 경우 apk다운로드 한 OpenCV sdk 아카이브 아래의 폴더에 있는 적절한 OpenCV 관리자 apk를 사용 합니다.
장점
- 약 40MB의 APK 크기 감소 (업그레이드도 고려).
- OpenCV 관리자는 하드웨어에 최적화 된 바이너리를 설치하여 속도를 높일 수 있습니다.
- OpenCV 관리자로 업그레이드하면 OpenCV의 버그로부터 앱을 저장할 수 있습니다.
- 다른 앱은 동일한 OpenCV 라이브러리를 공유 할 수 있습니다.
단점
- 최종 사용자 경험-애플리케이션의 설치 프롬프트가 마음에 들지 않을 수 있습니다.
OpenCV의 통합은 이러한 노력이기 때문에 사전 패키징하고 여기에 JCenter를 통해 게시했습니다. https://github.com/quickbirdstudios/opencv-android
모듈의 build.gradle 종속성 섹션에 이것을 포함하십시오.
dependencies {
implementation 'com.quickbirdstudios:opencv:3.4.1'
}
프로젝트의 build.gradle 저장소 섹션에 있습니다.
repositories {
jcenter()
}
gradle 가져 오기 후 lint 오류가 발생하지 않지만 MainActivity에서 이와 같이 OpenCV 라이브러리를 초기화하는 것을 잊지 마십시오.
public class MainActivity extends Activity {
static {
if (!OpenCVLoader.initDebug())
Log.d("ERROR", "Unable to load OpenCV");
else
Log.d("SUCCESS", "OpenCV loaded");
}
...
...
...
...
JavaCV를 사용하고 싶지 않다면 이것은 나를 위해 작동합니다 ...
1 단계-리소스 다운로드
http://opencv.org/downloads.html 에서 OpenCV Android SDK를 다운로드합니다.
2 단계-OpenCV 바이너리를 APK에 복사
libopencv_info.so 및 libopencv_java.so를 다음에서 복사하십시오.
OpenCV-2.?.?-android-sdk -> sdk -> native -> libs -> armeabi-v7a
...에
Project Root -> Your Project -> lib - > armeabi-v7a
lib 폴더를 압축하고 해당 zip의 이름을 whatever-v7a.jar로 바꿉니다.
이 .jar 파일을 복사하여 프로젝트의 여기에 배치하십시오.
Project Root -> Your Project -> libs
종속성 섹션의 프로젝트 build.gradle에이 줄을 추가하세요.
compile files('libs/whatever-v7a.jar')
지금 컴파일하면 .apk가 약 4MB 더 큰 것을 볼 수 있습니다.
(ARMv6도 지원하려면 "armeabi"를 반복하십시오. 더 이상 필요하지 않을 수 있습니다.)
3 단계-프로젝트에 Java SDK 추가
여기에서 Java 폴더를 복사하십시오.
OpenCV-2.?.?-android-sdk -> sdk
...에
Project Root -> Your Project -> libs (.jar 파일과 같은 위치)
( 'java'폴더 이름을 'OpenCV'로 바꿀 수 있습니다.)
이 새로 복사 된 폴더에 일반적인 build.gradle 파일을 추가합니다. 나는 이것을 사용했다 :
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral();
}
android {
compileSdkVersion 19
buildToolsVersion "19"
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
프로젝트 루트 settings.gradle 파일에서 다음과 같이 변경하십시오.
include ':Project Name:libs:OpenCV', ':Project Name'
종속성 섹션의 프로젝트 루트-> 프로젝트 이름-> build.gradle 파일에서 다음 행을 추가하십시오.
compile project(':Project Name:libs:OpenCV')
4 단계-프로젝트에서 OpenCV 사용
다시 빌드하면 프로젝트에서 OpenCV를 가져 와서 사용할 수 있습니다.
import org.opencv.android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) {}
나는 약간의 해킹이라면 이것을 알고 있지만 어쨌든 게시 할 것이라고 생각했습니다.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
maven {
url 'http://maven2.javacv.googlecode.com/git/'
}
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
compile 'com.googlecode.javacv:javacv:0.5'
instrumentTestCompile 'junit:junit:4.4'
}
android {
compileSdkVersion 14
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 14
}
}
이것은 나를 위해 일했습니다 :)
Android Studio 및 Gradle을 사용하여 포함 된 OpenCV로 Android NDK 애플리케이션을 빌드하는 방법에 대한 새 게시물을 게시했습니다. 자세한 내용은 여기 에서 볼 수 있으며 두 가지 방법을 요약했습니다.
(1) ndk-buildGradle 작업 내에서 실행
sourceSets.main.jni.srcDirs = []
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
commandLine "$ndkDir/ndk-build",
'NDK_PROJECT_PATH=build/intermediates/ndk',
'NDK_LIBS_OUT=src/main/jniLibs',
'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
(2) ndk-build외부 도구로 실행
매개 변수 : NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1
Android Studio 1.2 + OpenCV-2.4.11-android-sdk (.zip)에서도 작동합니다.
다음을 수행하십시오.
1) "Android Studio에서이 작업을 매우 쉽게 수행 할 수 있습니다. 아래 단계에 따라 프로젝트에서 OpenCV를 라이브러리로 추가하십시오."로 시작하는 대답을 따르십시오. TGMCians에 의해.
2) <yourAppDir>\libraries\opencv새로 만든 폴더 에서 수정 하십시오 build.gradle(TGMCians의 답변의 4 단계, OpenCV2.4.11-android-sdk에 적용되고 gradle 1.1.0 사용 ).
apply plugin: 'android-library'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
}
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 8
targetSdkVersion 21
versionCode 2411
versionName "2.4.11"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
}
}
}
3) 디렉토리에있는 * .so 파일은 "armeabi", "armeabi-v7a", "mips", "x86"(기본 OpenCV-location)에서 찾을 수 있습니다 : ..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs(TGMCians의 답변 9 단계).
즐기시고 이것이 도움이 되었다면 긍정적 인 평판을주십시오. 답변에 직접 답하려면 50 개가 필요합니다 (19 개 남음) :)
다음은 Android Studio 1.2에서 OpenCV를 사용하는 데 필요한 단계입니다.
- OpenCV를 다운로드 하고 아카이브를 추출하십시오.
- Android Studio에서 앱 프로젝트 열기
- 파일-> 새로 만들기-> 모듈 가져 오기 ...로 이동합니다 .
sdk/java이전에 추출한 디렉토리에서 선택하십시오 .- 모듈 이름 을 다음으로 설정
opencv - 다음 을 누르고 마침
- 수입 OpenCV의 모듈 및 업데이트에서 열기 build.gradle
compileSdkVersion하고buildToolsVersion당신이 당신의 컴퓨터에있는 버전 compile project(':opencv')앱 build.gradle에 추가dependencies { ... compile project(':opencv') }Gradle 파일과 프로젝트 동기화 누르기
OpenCV SDK에서 Android Studio gradle 프로젝트로 Java 프로젝트를 가져와 https://github.com/ctodobom/OpenCV-3.1.0-Android 에서 사용할 수 있도록했습니다.
build.gradlejitpack.io 서비스 덕분 에 파일에 두 줄만 추가하여 프로젝트에 포함 할 수 있습니다 .
OpenCV Android SDK에는 유용한 주석이 포함 된 gradle.build 파일 예제가 있습니다. https://github.com/opencv/opencv/blob/master/modules/java/android_sdk/build.gradle.in
//
// Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist).
//
// This file is located in <OpenCV-android-sdk>/sdk directory (near 'etc', 'java', 'native' subdirectories)
//
// Add module into Android Studio application project:
//
// - Android Studio way:
// (will copy almost all OpenCV Android SDK into your project, ~200Mb)
//
// Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project":
// Source directory: select this "sdk" directory
// Module name: ":opencv"
//
// - or attach library module from OpenCV Android SDK
// (without copying into application project directory, allow to share the same module between projects)
//
// Edit "settings.gradle" and add these lines:
//
// def opencvsdk='<path_to_opencv_android_sdk_rootdir>'
// // You can put declaration above into gradle.properties file instead (including file in HOME directory),
// // but without 'def' and apostrophe symbols ('): opencvsdk=<path_to_opencv_android_sdk_rootdir>
// include ':opencv'
// project(':opencv').projectDir = new File(opencvsdk + '/sdk')
//
//
//
// Add dependency into application module:
//
// - Android Studio way:
// "Open Module Settings" (F4) -> "Dependencies" tab
//
// - or add "project(':opencv')" dependency into app/build.gradle:
//
// dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar'])
// ...
// implementation project(':opencv')
// }
//
//
//
// Load OpenCV native library before using:
//
// - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated
// It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device)
//
// - use "System.loadLibrary("opencv_java3")" or "OpenCVLoader.initDebug()"
// TODO: Add accurate API to load OpenCV native library
//
//
//
// Native C++ support (necessary to use OpenCV in native code of application only):
//
// - Use find_package() in app/CMakeLists.txt:
//
// find_package(OpenCV 3.4 REQUIRED java)
// ...
// target_link_libraries(native-lib ${OpenCV_LIBRARIES})
//
// - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle
// Documentation about CMake options: https://developer.android.com/ndk/guides/cmake.html
//
// defaultConfig {
// ...
// externalNativeBuild {
// cmake {
// cppFlags "-std=c++11 -frtti -fexceptions"
// arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
// }
// }
// }
//
// - (optional) Limit/filter ABIs to build ('android' scope of 'app/build.gradle'):
// Useful information: https://developer.android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI)
//
// splits {
// abi {
// enable true
// reset()
// include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
// universalApk false
// }
// }
//
apply plugin: 'com.android.library'
println "OpenCV: " + project.buildscript.sourceFile
android {
compileSdkVersion 27
//buildToolsVersion "27.0.3" // not needed since com.android.tools.build:gradle:3.0.0
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_6
targetCompatibility JavaVersion.VERSION_1_6
}
sourceSets {
main {
jniLibs.srcDirs = ['native/libs']
java.srcDirs = ['java/src']
aidl.srcDirs = ['java/src']
res.srcDirs = ['java/res']
manifest.srcFile 'java/AndroidManifest.xml'
}
}
}
dependencies {
}
AndroidManifest.xml 파일에는 다음과 같은 권한 및 기능이 필요합니다. 그렇지 않으면 다음 대화 상자가 표시됩니다.
"장치가 카메라를 지원하지 않거나 잠겨있는 것 같습니다. 응용 프로그램이 종료됩니다."
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
OpenCV, Android Studio 1.4.1, gradle-experimental 플러그인 0.2.1
다른 답변은 나를 도왔습니다. 여기에 저에게 효과적이었습니다. opencv의 tutorial-1 샘플을 사용하고 있지만 프로젝트에서 NDK를 사용할 것이므로 gradle 플러그인과 다른 구조를 가진 gradle-experimental 플러그인을 사용하고 있습니다.
Android 스튜디오를 설치하고 Android NDK를 Android SDK Manager를 통해 설치해야하며 OpenCV Android SDK 를 다운로드하여 압축을 풀어야합니다.
이것은 간결하지만 완전하게 유지하기 위해 bash 스크립트 덩어리입니다. 내가 가진 큰 문제로 인해 IDE가 발전함에 따라 IDE 내 명령이 쓸모 없었다는 것이 모두 명령 줄에 있습니다.
먼저 OpenCV SDK의 루트 디렉토리 위치를 설정하십시오.
export OPENCV_SDK=/home/user/wip/OpenCV-2.4.11-android-sdk
cd $OPENCV_SDK
gradle 빌드 파일 만들기 ...
먼저 OpenCV 라이브러리
cat > $OPENCV_SDK/sdk/java/build.gradle <<'==='
apply plugin: 'com.android.model.library'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
minSdkVersion.apiLevel = 8
targetSdkVersion.apiLevel = 23
}
}
android.buildTypes {
release {
minifyEnabled = false
}
debug{
minifyEnabled = false
}
}
android.sources {
main.manifest.source.srcDirs += "."
main.res.source.srcDirs += "res"
main.aidl.source.srcDirs += "src"
main.java.source.srcDirs += "src"
}
}
===
그런 다음 자습서 샘플에 라이브러리에 레이블을 지정할 항목과 찾을 위치를 알려줍니다.
cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/settings.gradle <<'==='
include ':openCVLibrary2411'
project(':openCVLibrary2411').projectDir = new File('../../sdk/java')
===
자습서 용 빌드 파일을 만듭니다.
cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle <<'==='
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.2.1'
}
}
allprojects {
repositories {
jcenter()
}
}
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "org.opencv.samples.tutorial1"
minSdkVersion.apiLevel = 8
targetSdkVersion.apiLevel = 23
}
}
android.sources {
main.manifest.source.srcDirs += "."
main.res.source.srcDirs += "res"
main.aidl.source.srcDirs += "src"
main.java.source.srcDirs += "src"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.pro')
}
debug {
minifyEnabled = false
}
}
}
dependencies {
compile project(':openCVLibrary2411')
}
===
빌드 도구 버전을 올바르게 설정해야합니다. 설치 한 항목을 쉽게 확인할 수있는 방법이 있습니다. (Android SDK Manager를 통해 다른 버전을 설치할 수 있습니다.) 23.0.2가없는 경우 buildToolsVersion을 변경하십시오.
echo "Your buildToolsVersion is one of: "
ls $ANDROID_HOME/build-tools
첫 번째 줄의 환경 변수를 버전 번호로 변경하십시오.
REP=23.0.2 #CHANGE ME
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/sdk/java/build.gradle
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle
마지막으로 올바른 gradle 래퍼를 설정합니다. Gradle은이를 위해 깨끗한 디렉토리가 필요합니다.
pushd $(mktemp -d)
gradle wrapper --gradle-version 2.5
mv -f gradle* $OPENCV_SDK/samples/tutorial-1-camerapreview
popd
이제 모든 설정이 완료되었습니다. 이제 Android Studio에서이 디렉토리를 탐색하고 프로젝트를 열 수 있습니다.
다음 명령을 사용하여 명령 줄에서 자습서를 작성하십시오.
./gradlew assembleDebug
APK를 빌드하여 ./build/outputs/apk에 넣어야합니다.
참고 URL : https://stackoverflow.com/questions/17767557/how-to-use-opencv-in-using-gradle
'Nice programing' 카테고리의 다른 글
| Javascript setInterval 및`this` 솔루션 (0) | 2020.12.02 |
|---|---|
| 공개 디렉토리를 얻는 방법? (0) | 2020.12.02 |
| App.settings-Angular 방식? (0) | 2020.12.02 |
| PyCharm의 숨겨진 기능 (0) | 2020.12.02 |
| 오류 메시지없이 Nginx가 실행되지 않음 (0) | 2020.12.02 |