728x90
반응형

안드로이드내에서 웹뷰로 보안채팅을 여는 기능이 있다.

현재 get방식으로 앱에서 여는지, 모바일 웹으로 여는지에 따라 param값을 달리해주는데,

웹에서 뒤로가기시, 화면전환전에 모달을 띄워달라는 요구를 받고

해당 웹을 작업 후 , 앱내에서도 웹 함수를 호출할 일이 생겼다.

 

webSettings.setJavaScriptEnabled(true); 

webView.addJavascriptInterface(new WebAppInterface(웹뷰클래스.this), "인터페이스이름");

 

를 통해서 react 웹쪽에서 "인터페이스이름"으로 함수호출 callback을 이용한다.

 

전에 리엑트 네이티브에선 반대로 웹의 이벤트를 앱쪽에서 받아달라고했었는데,

다행히 콜백들이 존재하는 것에 감사한다.

728x90
반응형
728x90
반응형

오랜만에 RN 수정사항이 들어와서 프로젝트를 clone 하고 yarn 으로 모듈을 설치 한후 

 

yarn android 로 사뿐히 앱을 실행해보니

 

에러가 나왔다.

접근권한때문에 나오는 에러기때문에

 

 chmod 755 android/gradlew

명령어를 clone받은 프로젝트 루트에서 한번 입력해주고 다시 yarn android로 프로젝트 실행!

728x90
반응형
728x90
반응형

이번에 안드로이드 os가 업데이트 되면서, 기존에 잘 돌아가던, QR리더기쪽에 문제가 생겼다.

 

회사에 있는 기기의 os를 업데이트하며 테스트를 진행해봤는데, 아무 문제가 없었는데, 지속적으로 특정 유저에게서 문제가 발생한다는

 

QA팀의 연락을 받았다.

 

기기명과 os버전을 받고나서 테스트를 해보려고했는데, 회사에 없는 기기였다.

 

https://developer.samsung.com/remote-test-lab

 

Samsung Developers

The world runs on you.

developer.samsung.com

으로 들어가서 해당 기기를 대여했다.

 

접속하면

 

이 탭에서

 

대여할 기기를 선택해서 대여하면된다.

 

기기의 문제가 아니라, 안드로이드 sdk api 레벨에 따른 문제로 밝혀졌다.

728x90
반응형
728x90
반응형

앱내에서 사용하는 Webview로 이루어진 공지사항 / 개인정보처리방침 / 이용약관 등에서

타 부서에서 네트워크가 없을때, 에러코드가 나오는 것이 보기 안좋다고 404 에러 페이지를 제작해달라고했다.

web.setWebViewClient(new CustomWebViewClient(){
    @Override
    public void onReceivedError(WebView view, int errorcode, String description, String failingUrl) {
        if(errorcode == 404){
            web.loadUrl("file:///android_asset/html/error404.html");
        }else {
            web.loadUrl("file:///android_asset/html/errorElse.html");
        }
    }
});

해당 코드로, asset 폴더안에 html 폴더를 만들고(선택사항), html 파일을 퍼블리셔분에게 받아서

error가 나왔을때, 웹뷰에서 해당 html을 보여주는 식으로 작성해서 문제를 해결했다.

현재 웹뷰에서 데이터를 주고받는 것이 아니라, 404말고는 나올 에러가 없지만, error code에따라 분기처리 해놓았다.

728x90
반응형
728x90
반응형

앱내에서 SEND action을 통해 데이터 정보를 공유할때

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);

로 시작하는 intent 에서 에레가 발생했다.

 

정확한 위치는

shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share using"));

에서 에러가 났는데, 해당 에러 내용은 

 

E/DatabaseUtils: Writing exception to parcel
    java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://프로젝트이름.FileProvider/파일경로 from pid=28663, uid=1000 requires the provider be exported, or grantUriPermission()
        at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:835)
        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:695)
        at android.content.ContentProvider$Transport.query(ContentProvider.java:234)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:107)
        at android.os.Binder.execTransactInternal(Binder.java:1179)
        at android.os.Binder.execTransact(Binder.java:1143)

 

였다. 

 

 provider be exported, or grantUriPermission() 로 stack over flow를 검색해보고 나왔던

 

manifest provider 에 exported=true 옵션과

grantUriPermission()를 모두 해도 같은 에러가 나왔다.

 

결국 

shareIntent.setClipData(ClipData.newRawUri("", uri));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share using"));

 

 setClipdata를 넣어서 에러 해결

728x90
반응형
728x90
반응형

이번 프로젝트 마무리하면서 프로젝트를 처음 시작할때로 돌아갈수 있다면...

 

꼭 적용할 내용들

 

0.AA시에 꼭 문서를 꼼꼼하게 남겨놓자

 - MVP로 AA를 할경우, initData에 필요한 것들을 view별로 문서화해놓자, 안드로이드면 어느 생활주기에서 initData할지까지 적어놓고,

    RN일 경우에는 어느 Screen에서 initData에 필요한것들을 작성

 

1. 프로젝트 일정이 촉박할때는, 템플릿 코드를 회사측에서 구매해서 수정하는 식으로 개발하도록 회사에 건의해봐야한다.

 - 큰 프로젝트에 맨파워가 부족하면, 다음에 꼭 고려하도록 해야겠다. 안그러면 그만큼 더 많이 고생한다고 느꼈다.

 

2.앱 클라이언트 단에서 사용하는 DB를 먼저 붙여서 써야한다

 - 개인차가 있겠지만, 나는 DB를 먼저 붙여서 쓰는게 내 개발 스타일에 잘 맞고, 에자일 방식에 잘 대응이 된다.

 

3.시간이 아무리 부족해도 UI/UX의 기본틀은 짜주고 주니어에게 부탁하자

  - 나도 주니어지만, 내가 초반에 한두시간 더 일하고 집중하는게 결과적으로 내 일하는 시간을 줄일 수 있다.

 

4.View단을 나눌때, 가로모드, ar rtl등을 미리 고려해서 짜자

  - 가로모드가 가능한지 미리 기획단에서 확인하도록 하자

728x90
반응형
728x90
반응형

안드로이드 앱 release 빌드를 하면서 처음 겪어본 에러였다.

 

1.0.1 버전부터 현재 2.2.4버전인데, 구글 플레이 스토어에 베포를 하려고 Generate Signed Bundle / APK 를 실행했더니,

잘되던 빌드가 되지않아서 살짝 당황했다.

 

에러 내용은 다음과 같다. 

Lint found fatal errors while assembling a release target.

Fix the issues identified by lint, or create a baseline to see only new errors:
```
android {
    lint {
        baseline = file("lint-baseline.xml")
    }
}
```

For more details, see https://developer.android.com/studio/write/lint#snapshot

 

린트 검사로 코드 개선  |  Android 스튜디오  |  Android Developers

테스트를 빌드하여 앱이 기능적 요구사항을 충족하는지 확인하는 것 외에도 린트를 통해 코드를 실행하여 코드에 구조적 문제가 없는지 확인하는 것이 중요합니다.

developer.android.com

 

해당 내용을 인터넷을 통해 찾아보니, string.xml 에서 값들이 제대로 명시되지 않았을때, 나오는 경우가 있다고한다.

 

현재 서비스하고있는 앱은 16개언어로 다국어 처리가 되어있는데,

 

%s %d 와 \n 등을 제대로 xml에 적용시키지않는 문제에서 발생했다.

 

\ n 등과 %s 등을 제대로 수정하고나서 다시 빌드해보니 해결되었다.

 

728x90
반응형

+ Recent posts