android Pie 대응을 위해서 targetSdkVersion을 28로 변경 후  갑자기

UnknownServiceException: CLEARTEXT communication to example.com not permitted by network security policy

와 같은 오류가 나오게 경험을 하게 됩니다.


이유는 android pie부터 http가 아닌 https를 이용해야 합니다.



의 내용을 확인하면 됩니다.


간단하게 api의 도메인이 http가 아닌 https를 지원하고 http를 https로 변경만 하면 됩니다. 대부분의 회사 api들이 https를 지원하지만 그렇지 않은 경우도 있죠.

이럴 땐 http로 통신할 도메인들에 대해서 관리를 해주면 됩니다.


우선


res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   
<domain-config>
       
<domain includeSubdomains="true">example.com</domain>
       
<trust-anchors>
           
<certificates src="@raw/my_ca"/>
       
</trust-anchors>
   
</domain-config>
</network-security-config>


와 같은 파일을 만들어 준 뒤

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
   
<application android:networkSecurityConfig="@xml/network_security_config"
                    ...
>
        ...
   
</application>
</manifest>

와 같이 androidmanifest에 등록해 줍니다.


다른 방법은.

<base-config cleartextTrafficPermitted="true" />

을 network_security_config.xml에 등록을 해서 기본적으로 http를 지원하게 하는 방법도 있습니다. 이건 지정된 domain이외에 기본적으로.. 외부의 api 에 대해서 http를 지원하겠다고 하는 것입니다.


또 다른 방법으로는

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
   
<application android:useCleartextTraffic="true"
                    ...
>
        ...
   
</application>
</manifest>

해주는 것입니다.

자세한 설명은

android:usesCleartextTraffic


링크를 통해서 확인할 수 있습니다.


그래도.. 왠만하면 api는 https를 지원하는게 좋겠죠!!!!

'Android' 카테고리의 다른 글

goodbye? onActivityResult...  (0) 2020.05.14
kotlin file read...  (0) 2019.04.17
AndroidStudio에서 File Template이용하기.  (0) 2016.06.14
AndroidStudio에서 lombok 사용하기  (0) 2016.04.10
Dagger2 + Sqlbrite  (0) 2015.11.17
자바로 만들어본 간단한 포트 스캐너...
그냥 요즘 그동안 공부한거 복습하고
포트폴리오 만들고 하다가
자바를 또 건드려보는... 그러다가 심심해서 만들어 본 포트 스캐너...
아이피 입력해서 그 아이피에 사용하는 포트와 사용하지 않는 포트를 출력...


import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class PortScanner implements Runnable, ActionListener{
 //기본
 private JFrame fr = new JFrame("Port Scanner");
    private JButton scanBN = new JButton("스캔");
    private JTextField inputIP = new JTextField("", 18);
    private JLabel ipLB = new JLabel("IP Address : ");
    private DefaultListModel listModel = new DefaultListModel();
    private JList listResult = new JList(listModel);
    private JScrollPane js = new JScrollPane(listResult);
   
    //패널
    private JPanel inputPanel = new JPanel();
   
    //레이아웃
    BorderLayout bLayout = new BorderLayout();
    private int index;
    private String ip;
    public PortScanner(){         
     listResult.setVisibleRowCount(10);
     
     inputPanel.add(ipLB);
     inputPanel.add(inputIP);
     inputPanel.add(scanBN);
     scanBN.addActionListener(this);
     
     fr.getContentPane().add(bLayout.CENTER, js);
     fr.getContentPane().add(bLayout.SOUTH, inputPanel);
     
     fr.setBounds(100, 100, 400, 300);
     fr.setVisible(true);
       
    }
    public void actionPerformed(ActionEvent ae){
        Object obj = ae.getSource();
        if(obj == scanBN){
            ip = inputIP.getText();
            if(ip == null || ip.trim().length()==0){
             inputIP.requestFocusInWindow();
             inputIP.setText("");               
                return;
            }else{
                listModel.insertElementAt(ip,index);
                listResult.setSelectedIndex(index);             
                listResult.ensureIndexIsVisible(index);
                index++;
                Thread t = new Thread(this);
                t.start();               
            }
        }
    }
    public void run(){
        Socket s = null;
        for(int i=1;i<65536;i++){
            try{
                s = new Socket(ip,i);
                listModel.insertElementAt(i+
                        "번 포트가 사용중입니다",index);
                listResult.setSelectedIndex(index);
                listResult.ensureIndexIsVisible(index);
            }catch(IOException e){
             listModel.insertElementAt(i+
                        "번 포트를 사용하지 않습니다.",index);
                listResult.setSelectedIndex(index);
                listResult.ensureIndexIsVisible(index);
            }
        }
    }
    public static void main(String[] args){
        new PortScanner();
    }
}

'tip' 카테고리의 다른 글

linux locale 설정 변경  (0) 2009.01.07
linux man page...  (0) 2009.01.04
Mysql 에러별 대처 방법  (0) 2008.12.29
부팅시 USB키보드가 안먹힐때  (0) 2007.07.27
모니터 사이즈 비교  (0) 2007.07.18

+ Recent posts