Android Permission - 사진 및 파일 접근 권한 요청

이미지
'패션을 찾아줘'의 사진 불러오기 기능을 사용하기 위해 사용자에게 파일 접근에 대한 권한 요청을 해야 된다.  구글 검색 결과 대부분 AppActivity 자체의 소스를 추가하는 방식이었는데, 다행히 cocos2dx 와 연동되는 샘플 소스를 찾아 적용할 수 있었다.  cocos2dx-runtime-permission - 앱 시작 시 요청이 아닌 해당 기능 사용 시 요청하는 소스. https://github.com/mars3142/cocos2dx-runtime-permission AppActivity   - onCreate 밑에 추가. // sample sources private static final int PERMISSION_REQUEST_CODE = 9001; public static native void Permissioncallback(boolean granted); // change // 사진 기능을 사용할 때 호출하며 결과를 onRequestPermissionsResult()로 콜백해준다. @Keep // Annotation for ProGuard not to delete public static void askForPermission() { if (!hasPermission()) { ActivityCompat.requestPermissions(Cocos2dxHelper.getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE); } } // 권한이 허용되어 있는지 여부를 리턴해준다. @Keep // Annotation for ProGuard not to delete public

Android Firebase admob사용을 위한 SHA인증서 등록

이미지
(Firebase admob 사용 시)Google Play Console에 앱을 등록할 때 구글 인증서 사용을 활성화한 경우 앱 서명 인증서 및 업로드 인증서를 Firebase Console 에 등록해야 한다.  Google Play Console SHA Google Play Cosole에 apk를 등록한 후 다운로드 해 테스트 해보니 admob 광고가 나오지 않는 문제가 발생했다.  admob test app id로 빌드했을 때는 테스트 광고가 정상적으로 출력됐기 때문에 인증과 관련된 문제일 가능성이 높다고 판단하여 인증서를 등록하기로 했다.  Google Play Console - 출시 관리 - 앱서명   위의 SHA라고 돼있는 지문을 복사해서, Firebase Console 의 앱 설정의 지문 추가를 해준다. 지문 추가 후 google-services.json 다시 다운로드 적용. 정확히 어떤 지문을 등록해야 되는지 알 수가 없기 때문에 등록 가능한 4개의 지문을 모두 등록했다. 하지만  google-services.json  파일을 보면 추가된 4개의 지문 중 SHA-1 지문 2개(앱 인증서/업로드 인증서)만 등록이 된다.  등록 후 테스트했을 때 광고가 여전히 나오지 않아서 인증서 문제인지 다른 문제인지 알 수가 없는 상황이 발생했지만, 몇 번의 빌드 후에 정상적인 광고가 나오는 것을 확인할 수 있었다. 

Android App 설정 파일 적용하기

이미지
cocos2dx 3.17.1 Resources 폴더의 설정 파일 불러오기. Android에서 게임 시작 시 필요한 정보들을 텍스트 파일에서 불러오려면. Resources 설정 파일 불러올 때의 처리 방법. auto configText = FileUtils::getInstance()->getStringFromFile(sourceFileName); // 설정 파일에서 스트링 불러오기. auto path = FileUtils::getInstance()->getWritablePath(); // 쓰기 가능한 경로 얻기 FileUtils::getInstance()->writeStringToFile(configText, path + sourceFileName); // 스트링을 쓰기 가능한 경로에 파일로 저장. if (FileUtils::getInstance()->isFileExist(path + sourceFileName) ) // 저장 됐는지 확인. { log("FileSystem | [%s] exist",(path + sourceFileName).c_str() ); } else { log("FileSystem | %s not exist",(path + sourceFileName).c_str() ); } m_fullSourceFileName = path + sourceName; // 저장된 파일 경로 저장. 위의 과정 적용 후, 설정 파일에 접근할 수 있다. 사용 예 ConfigINI::getInstance()->init(m_fullSourceFileName); ConfigINI::getInstance()->getString("USER_MONEY");

Android Studio App 아이콘 적용하기

이미지
Image Asset 추가 프로젝트 우클릭 - new - Image Asset 아래 화면에서  Icon Type : Legacy only. Asset Type : Image path : 아이콘으로 사용할 이미지를 불러온다.  finish mipmap에 적용된다. 

Android Studio App 스플래시 스크린 만들기 - Splash Screen

이미지
참고 사이트   https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 샘플 소스   https://github.com/cstew/Splash 샘플소스에서 주요 파일 경로 SplashActivity.java  Splash / app / src / main / java / com / bignerdranch / android / splash / background_splash.xml Splash / app / src / main / res / drawable / colors.xml, styles.xml Splash / app / src / main / res / values / 안드로이드 해상도 MDPI: Portrait: 320x480px. Landscape: 480x320px. HDPI: Portrait: 480x800px. Landscape: 800x480px. XHDPI: Portrait: 720px1280px. Landscape: 1280x720px. XXHDPI: Portrait: 960px1600px. Landscape: 1600x960px. XXXHDPI: Portrait: 1280px1920px. Landscape: 1920x1280px. ios에서는 launch image. xcode에서는 어렵지 않게 등록했지만 안드로이드에서는 약간의? 작업이 필요했다. 위의 가이드에서는 앱 시작 시 로딩이 필요한 시간만큼 런치 이미지를 띄우는 방식이다. 딱 봐도 이상적인 방법이므로 적용하기로 했다. (cocos2dx에서의 구현도 가능하지만 강제 딜레이를 주는 방식 이외의 방법을 찾아내지 못했다..) 필요한 xml 파일들. background_splash.xml - drawble 폴더에  넣어준다.  (Android Studio 3.4.1에는 drawable폴더 만들기가 없다. 그래서 그냥 만들어줌.) colors.xml, styles.

Android Studio 앱 이름 지역화(app name Localization)

이미지
지역화  가이드 문서 language code  참고 사이트 앱 설치 시 표시되는 앱 이름 지역화 하기 기기에서 사용중인 언어에 따라 앱 이름을 지역할 수 있다.  국가 코드를 아래 그림처럼 넣어주면 되는데 검색해도 쉽게 나오진 않는다.  가이드 문서를 봐도 내가 못찾는 건지 언어 코드가 전부 나와있지 않다.  적용한 언어 코드들. 한국 values-b+ko 중국 간체 values-b+zh-rCN 중국 번체 values-b+zh-rTW 일본 values-b+ja 각 언어별 앱 이름 적용 res우클릭 - New - Directory 각 언어별 values폴더를 생성해준다. 기본 언어는 values폴더(영어). values폴더의 strings.xml을 복사해서 방금 생성한 폴더들에 넣어주면 Android Studio에서 아래와 같이 표시된다.  strings.xml 편집 <resources> <string name="app_name">패션을찾아줘</string> </resources> 구동 확인 영어                             한국어    

Android App 실기 테스트 - 릴리즈 모드 apk 테스트

릴리즈 모드로 APK를 추출하여 실기에서 테스트 - 앱 구동 실패. 앱 서명과 APK 추출까지 순탄하게 진행됐지만, release 모드로 빌드된 apk는 실기에서 동작하지 않는 문제가 발생한다.  앱 시작 시 튕기는 현상이며, debug 모드가 아니기에 crash에 대한 정보를 얻을 방법이 없었다. 검색으로 찾아낸 원인은 바로 minifyEnabled true   <- 이부분이다.  build.gradle(Module: gonefashion-android) buildTypes { release { debuggable false jniDebuggable false renderscriptDebuggable false minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' if (project.hasProperty("RELEASE_STORE_FILE")) { signingConfig signingConfigs.release } minifyEnable을 false로 하면 문제는 해결된다. 정상적으로 실행되며 crash는 발생하지 않는다.  minifyEnabled 사용 및 proguard 룰 추가 - 앱 구동 성공. crash 원인을 알았으니, 그대로 출시해도 되겠지만 minifyEnabled를 활용해 보고자 검색을 이어갔다.  답은 적절한 proguard 룰을 추가하는 것이었다. proguard-rules.pro  - 아래 소스 추가 -keep class com.google.android.