Android Java Script를 이용하여 Android APP을 만들때 script file과 html file을 asset 에 저장을 해서

java script 를 사용할경우 

바이너리 배포시에 APK 파일안의 assets 폴더를 볼수있기때문에 보안적 이슈가 생깁니다.

예를 들어 key 값이나 로직등등~

예방할 방법은 하드코딩으로으로 Html 이나 Java script file를 String 으로 java class 안에 가지고 있고
스크립트 사용시   Html 이나 Java script file 을 local 에 생성하여 사용하면 됩니다.

Progard 를 적용한다 하여도 String 객체는 안적용된다는 말이있는데 확인을 해봐야할듯;; 

디컴 파일 해서 그렇게 까지 보고싶으면 어쩔수 없뜸 ㅋㅋ


그런데! 제가 하루동안 헤매인 이유는 local에 저장을 했을 경우 그 위치가 어디인가 입니다.

그 위치는

file:///data/data/패키지 이름/files/파일명입니다~

그리구 만약 스크립트 안의  src='script.js'  요런 부분 도
  src='file:///data/data/패키지/files/script.js'  요리 바꿔줘야겠죠~ ㅋ

아래는  String 을 local file 로 저장하는 함수

 

  1. /**
  2.          * java script html file  을 <br>
  3.          *file:///data/data/패키지명/files/ 위치에 생성해준다.<br>
  4.          *
  5.          * @param oContext
  6.          * @return String HTML 파일 위치 값
  7.          */
  8.         private String copyHTML(Context oContext){
  9.                  String sResult = null;
  10.                  try {
  11.  //기존 HTML file 삭제 file 양이 크지 않아 삭제후 재 복사하여도 속도에 이슈가 없어서
  12.  //훗날 업데이트시 스팸메일 변경을 대비하여 삭제하고 재 생성
    // 파일의 크기가 클경우 생성후 있으면 재생성하지 않는 로직 필요
  13.                          deleteHTML(oContext);
  14.                          
  15.                         oContext.getFilesDir();
  16.                 File oDir = oContext.getFilesDir();
  17.                 oDir.mkdir();
  18.                 File oFile = new File(oDir.getAbsolutePath()+"/" + FILE_NAME);
  19.                 String sPath = oFile.getAbsolutePath();
  20.                
  21.                 //파일이 있을경우
  22.                 if(oFile.exists()){
  23.                         sResult =  "file://" + sPath;
  24.                         return sResult;
  25.                 }
  26.                                                
  27.                 FileOutputStream fo = new FileOutputStream(oFile);                    
  28.                 OutputStreamWriter osw = new OutputStreamWriter(fo);
  29.                 BufferedWriter bw = new BufferedWriter(osw);
  30.                
  31.                 bw.write(SPAM_HTML); // local 에 저장할 문서 
  32.                 bw.flush();
  33.                
  34.                 bw.close();
  35.                 osw.close();
  36.                 fo.close();
  37.  
  38.                 sResult =  "file://" + sPath;
  39.                
  40.         } catch (FileNotFoundException e) {
  41.                 sResult = null;
  42.                 deleteHTML(oContext);
  43.                         e.printStackTrace();
  44.          } catch (IOException e) {
  45.                  sResult = null;
  46.                  deleteHTML(oContext);
  47.                   e.printStackTrace();
  48.          }
  49.                
  50.                 return sResult;
  51.          }
  52.  
  53.  
  54.         /**
  55.          * 파일 유무확인해 HTML 파일이 있을경우 삭제
  56.          * @param oContext
  57.          */
  58.         private void deleteHTML(Context oContext) {
  59.                 oContext.getFilesDir();
  60.                 File oDir = oContext.getFilesDir();
  61.                 oDir.mkdir();
  62.                 File oFile = new File(oDir.getAbsolutePath() + "/" + FILE_NAME);
  63.  
  64.                 // 파일이 있을경우
  65.                 if (oFile.exists()) {
  66.                         oFile.delete();
  67.                 }
  68.         }

만약 Android Javascript WebView client 를 모른다! 

http://developer.android.com/guide/webapps/webview.html 

디벨로퍼에 가시면 자세히 나와있습니다~~