본문 바로가기

파이어몽키

[XE5] 안드로이드 배포 시 인터넷 사용 권한 미적용 이슈(android.permission.INTERNET)

안녕하세요. 험프리.김현수입니다.

오늘 안드로이드 앱 배포 시 인터넷 연결이 되지 않는다는 내용을 전달받아 확인 후 정보 공유차 글을 남깁니다.


이슈

  • 안드로이드 앱 배포 시 인터넷 사용 권한이 환경파일(AndroidManifest.xml)에 기록되지 않아 앱에서 인터넷 사용 시 오류가 발생
  • 해당 이슈는 현재 기준 XE5 Update2 - 19.0.14356.6604(Build no)에서 발생되고 있습니다.


안드로이드 앱 배포를 위해서는 Target platform을 Android로 선택 후 Configuration을 Application Store로 선택 해야 합니다.(Build Configurations도 Release로 선택해야 디버깅에 관련된 코드가 포함되지 않아 앱의 용량이 줄어듭니다.)


위와 같이 Application Store로 선택 후 apk를 배포 후 인터넷 연결 관련 작업(IdHttp 또는 DataSnap 이용)을 시도하면 아래와 같은 오류가 발생합니다.

Socket Error +13 

Access Denied. 

eIDSocketError.

▶ Uses Permissions 확인

원인 파악을 위해 테스트를 진행해 봤습니다. 우선 아래와 같이 Uses Permissions에 Internet 항목을 확인했습니다.(정상적으로 선택이 되어 있습니다.)

* Uses Permissions는 안드로이드 앱에서 사용할 권한을 설정하는 창입니다.

▶ AndroidManifest.xml 파일 확인

소스를 컴파일 하면 (프로젝트 경로)\Android\Reelase\ 경로에 AndroidManifest.xml 파일이 생성됩니다.

해당 XML 파일에 위에서 설정한 권한이 포함되어야 하는데 Application Store 설정에 한해 포함되지 않는 이슈를 발견했습니다.





    
    
    
    
    
    
    
    
    
    
    
    

    
        
        
            
            
              
                
                
             
        
        
    
   

위의 XML 코드 중 <uses-permission> 태그를 유심히 보시면 인터넷(android.permission.INTERNET) 항목이 빠져있는걸 확인하실 수 있습니다. 분명히 디버그에서는 인터넷 항목이 포함되는데 Application Store 항목에서는 빠져있네요.

▶ 해결방안

다른 개발툴들도 마찬가지지만 RAD Studio도 초기여서 그런지 잔잔한 버그가 있네요. 하지만 최근 Hotfix에서 볼수 있듯이 빠르게 버그들이 수정되고 고쳐지고 있으니 엠바카데로 아니 델파이를 믿어봅니다.^^


버그레포팅된 내역을 확인해 보니 이미 발빠른 개발자들이 해당 버그를 레포팅했고 이미 내부적으로는 처리된 것으로 확인됩니다.(하지만, 아직 Hotfix등으로 제품에 적용은 되지 않은 것 같습니다.)


http://qc.embarcadero.com/wc/qcmain.aspx?d=119585


해결하는 방법을 보니

RAD Studio(델파이)에서는 AndroidManifest.xml 파일을 만들기 위해 AndroidManifest.template.xml을 입시파일로 이용하는데 임시파일을 수정해서 해결할 수 있습니다. AndroidManifest.template.xml파일은 프로젝트 소스의 루트에 포함됩니다. 


아래는 임시파일을 수정한 내용입니다.





    
    
<%uses-permission%>
    

    
        
        
            
            
              
                
                
             
        
        
    
   

기존 : <%uses-permission%>

변경 : <%uses-permission%>

    <uses-permission android:name="android.permission.INTERNET" />


위와 같이 AndroidManifest.template.xml 파일에 인터넷을 사용하겠다는 권한을 추가해서 배포하게 되면 해당 이슈를 해결할 수 있습니다.


큰 내용이 아닌데 너무 길게 썼네요^^