programing

Android 에뮬레이터에서 localhost : port에 액세스

new-time 2020. 5. 10. 12:36
반응형

Android 에뮬레이터에서 localhost : port에 액세스


에서 실행되는 로컬 컴퓨터에서 웹 서비스를 실행하고

localhost:54722

있습니다.Android 에뮬레이터에서 실행되는 앱에서 서비스를 호출하고 싶습니다.

10.0.2.2

응용 프로그램에서 사용 하면 localhost에 액세스 한다는 것을 읽었 지만 포트 번호로는 작동하지 않는 것 같습니다. 라고 말합니다

HttpResponseException: Bad Request

.


IP 주소 "

10.0.2.2

"를 사용하여 호스트 시스템에 액세스 할 수 있습니다 .이것은 안드로이드 팀에 의해 이런 식으로 설계되었습니다. 따라서 웹 서버는 localhost에서 완벽하게 실행할 수 있으며 Android 앱에서 "

http://10.0.2.2:<hostport>

" 를 통해 액세스 할 수 있습니다 .에뮬레이터가 프록시 서버를 통해 인터넷에 액세스해야하는 경우 에뮬레이터의 확장 제어 화면에서 사용자 정의 HTTP 프록시를 구성 할 수 있습니다. 에뮬레이터가 열린 상태에서

추가 도트

를 클릭 한 다음

설정

프록시

를 클릭 합니다 . 여기에서 고유 한 HTTP 프록시 설정을 정의 할 수 있습니다.

HTTP 구성 스크린 샷


기본 AVD에 10.0.2.2를 사용하고 Genymotion에 10.0.3.2를 사용하십시오.


IIS Express를 사용하는 경우`localhost '대신 모든 호스트 이름에 바인딩해야합니다. 이 정답을 확인하십시오.

https://stackoverflow.com/a/15809698/383761

모든 IP 주소 및 호스트 이름에 바인딩하도록 IIS Express 자체에 지시하십시오. .config 파일 (일반적으로 % userprofile % \ My Documents \ IISExpress \ config \ applicationhost.config 또는 Visual Studio 2015의 경우 $ (solutionDir) .vs \ config \ applicationhost.config)에서 사이트의 바인딩 요소를 찾아 추가하십시오.
<binding protocol="http" bindingInformation="*:8080:*" />

기존 사이트를 수정하는 대신 두 번째 바인딩으로 추가해야합니다. 그렇지 않으면 VS가 추가 된 새 사이트 만 다시 추가합니다.

(1)

또한 관리자로 VS를 실행해야 할 수도 있습니다.


IIS Express에서 웹 응용 프로그램을 실행하는 Visual Studio에서 동일한 문제에 직면했습니다. 수정하려면 프로젝트 속성으로 이동 한 다음 디버그 탭을 클릭하고

http : // localhost : [YOUR

PORT]를

http://127.0.0.1:[YOUR

PORT]로 변경하고 안드로이드 URL을

http : /

로 설정해야합니다 . /10.0.2.2:[YOUR PORT]. 그것은 나를 위해 일했다.


Visual Studio Professional 2015에서 "Conveyor by Keyoti"를 설치하여 문제를 해결했습니다. 컨베이어는 외부 요청을 가능하게하는 포트 (45455)로 REMOTE 주소 (IP)를 생성합니다. 예:

여기에 이미지 설명을 입력하십시오

컨베이어 (없이 안드로이드 에뮬레이터 네트워크에 또는에서 외부 태블릿 및 휴대 전화에서에서 당신 테스트 웹 응용 프로그램을 할 수 있습니다

http://10.0.2.2:<hostport>

)단계는 다음 링크에 있습니다.

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti


로컬 호스트에서 웹 서버가 실행 중입니다. 에뮬레이터를 열고 로컬 호스트에 연결하려면을 사용하고

192.168.x.x

있습니다. 즉, 로컬 LAN IP 주소를 사용해야합니다. 그건 그렇고, 당신

HttpResponseException (Bad Request)

이 호스트에 접근 할 수 없다는 것을 의미하지는 않습니다.다른 오류로 인해이 예외가 발생합니다.


문제는 안드로이드 에뮬레이터 매핑이다

10.0.2.2

127.0.0.1

,

하지

localhost

. 따라서 웹 서버를 서버가

127.0.0.1:54722

아닌 서버로 구성하십시오

localhost:54722

. 그렇게해야합니다.


당신은 URL을 설정해야합니다

10.0.2.2:portNr

portNr =

현재 서비스가 실행되고있는 ASP.NET Development Server의 지정된 포트

localhost:3229/Service.svc

그래서 내 URL은

10.0.2.2:3229

이 방법으로 내 문제를 해결했습니다.도움이되기를 바랍니다 ...


"BadRequest"는 일반적으로 서버 자체에서 전송 된 오류입니다. rfc 2616 참조

10.4.1 400 잘못된 요청잘못된 구문으로 인해 서버에서 요청을 이해할 수 없습니다. 클라이언트는 수정없이 요청을 반복해서는 안됩니다.

따라서 서버에 연결되어 있지만 요청이 Expecet 양식에 맞지 않습니다. 연결을 만드는 방법, 포함 된 헤더 (있는 경우)를 모르지만 확인해야합니다.더 많은 도움이 필요하면 코드의 내용과 서버에 연결하는 데 사용되는 내용을 설명하여 큰 그림을 얻으십시오.

다음

은 동일한 문제가있는 질문입니다. 대답은 헤더에 내용 유형이 설정되지 않았다는 것입니다.


로컬 호스트를 실행 한 후

http://localhost:[port number]/

포트 번호를 찾았습니다.그런 다음 Command에서 IP 주소를 얻고 windows 명령을 열고 입력하십시오.

ipconfig 여기에 이미지 설명을 입력하십시오

필자의 경우 IP는

192.168.10.33

내 URL이

http://192.168.10.33 : [포트

번호] /입니다. Android에서 스튜디오는이 URL을 URL로 사용합니다. 그런 다음 에뮬레이터의 수동 프록시에서 URL과 포트 번호를 설정하십시오.

여기에 이미지 설명을 입력하십시오


 

10.0.2.2

Android의 보안 도메인이 아니기 때문에 기본적으로 비 TLS 연결이 금지 된 API 28+의 네트워크 구성에서 보안되지 않은 도메인을 허용해야합니다.다음 구성을 사용할 수 있습니다.다음과 같이 main / res / xml / network_security_config.xml에 새 파일을 작성하십시오.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

그리고 AndroidManifest.xml에서 지적하십시오.

<application
......
......
android:networkSecurityConfig="@xml/network_security_config">

Android 에뮬레이터에서 IISExpress 웹 API에 액세스하는 방법을 보여 드리고자합니다. Visual Studio 2015를 사용하고 있습니다. Android Studio에서 Android Emulator를 호출합니다.내가해야 할 일은

applicationhost.config

파일 의 바인딩 구성에 다음 줄을 추가하는 것입니다.

<binding protocol="http" bindingInformation="*:<your-port>:" />

그런 다음 IP4 주소를 확인하고 사용하여 Android 에뮬레이터에서 API에 액세스합니다.

요구 사항 :

Visual Studio를 관리자 권한으로 실행해야합니다.

이 게시물

를 수행하는 완벽한 방법을 제공합니다.자세한 내용 은 github에 대한

내 게시물

방문하십시오도움이 되었기를 바랍니다.


Laravel Homestead 사용자 : Laravel을 Homestead와 함께 사용하는 사람이라면 에뮬레이터에서 192.168.10.10을 사용하여 앱 백엔드에 액세스 할 수 있습니다그래도 작동이 안되는? 또 다른 좋은 해결책은 ngrok https://ngrok.com/ 을 사용하는 것입니다


localhost는 시작할 때 내 에뮬레이터에서 제대로 작동하는 것처럼 보였고 연결 거부 예외가 발생하기 시작했습니다. 에뮬레이터 브라우저에서 127.0.2.2를 사용했으며 에뮬레이터의 내 Android 앱에서이를 사용하면 다시 연결 거부 문제를 표시하기 시작했습니다. .그런 다음 ifconfig를하고 ip 192.168.2.2를 사용했으며 완벽하게 작동했습니다.


잘못된 요청은 일반적으로 전송하는 데이터의 형식이 잘못되었음을 의미합니다. 데이터 매핑이 일치하지 않을 수 있습니다. 요청이 잘못되면 서버에 연결할 수 있지만 요청이 제대로 전송되지 않는 것입니다.


아무도 여전히 이것을 찾고 있다면 이것이 나를 위해 일한 방법입니다.연결된 장치 / 에뮬레이터와 관련하여 컴퓨터의 IP를 찾아야합니다. 에뮬레이터의 경우 다음 단계를 수행하십시오.

  1. VM 가상 상자로 이동-> 목록에서 연결된 장치를 선택하십시오.
  2. 설정-> 네트워크-> 장치가 연결된 네트워크 찾기를 선택하십시오. 저에게는 'VirtualBox 호스트 전용 이더넷 어댑터 # 2'였습니다.
  3. virtualbox에서 파일-> 환경 설정-> 네트워크-> 호스트 전용 네트워크로 이동하여 위 단계에서 지정된 네트워크의 IPv4를 찾으십시오. (호버링하면 정보를 얻을 수 있습니다)

에뮬레이터에서 로컬 호스트에 액세스하려면이 IP를 제공하십시오. 포트는 서비스를 실행 / 게시하는 동안 제공 한 것과 동일합니다.

참고 # 1 :

방화벽 및 인바운드 규칙을 관리했는지 확인하십시오.

참고 # 2 :

컴퓨터를 다시 시작한 후이 IP를 확인하십시오. "다음 IP 사용"을 제공 한 경우에도 호스트 전용 IP가 변경되었습니다.


서비스 계층에서 Visual Studio IIS Express를 사용할 때 발생하는 정확한 문제를 해결했습니다. 10.0.2.2를 가리키면 포트가 작동하지 않습니다. 다른 게시물에서 언급했듯이 IIS Express를 엉망으로 만드는 대신 IIS Express 앞에 프록시를 배치했습니다. 예를 들어, 아파치 또는 nginx. nginx.conf는 다음과 같습니다

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

    location / {
        proxy_pass http://localhost:54722;
    }
  }

그런 다음 안드로이드는 내 IP 주소를 192.168.xx : 8090으로 가리켜 야합니다.


node express 또는 angular-cli와 같은 타사 패키지를 사용하는 경우 컴퓨터의 IP를 찾아서 localhost 대신 서버 시작 구성 내에서 해당 IP에 호스트를 연결해야합니다. 그런 다음 IP를 사용하여 에뮬레이터에서 시작하십시오. 예를 들어,

ng serve -H 10.149.212.104

angular-cli를 사용 하려면 다음 을 사용해야했습니다. 그런 다음 에뮬레이터에서 사용했습니다.

http://10.149.212.104:4200


1) cmd에서 ipconfig 명령을 실행하십시오.2) 당신은 이와 같은 결과를 얻을 것입니다

여기에 이미지 설명을 입력하십시오

3) 그런 다음 VMWare 네트워크 어댑터 1의 IPv4 주소와 포트 번호를 차례로 사용하십시오. 내 경우 8080이므로 localhost를 사용하는 대신 8080192.168.56.1:8080을 사용하고 있습니다

여기에 이미지 설명을 입력하십시오

끝난.....


Windows 10을 개발 플랫폼으로 사용하고 있으며 에뮬레이터의 10.0.2.2:port에 액세스하는 것이 예상대로 작동하지 않으며이 질문의 다른 솔루션에 대해서도 동일한 결과가 발생합니다.몇 시간 동안 파고

후 에뮬레이터 시작 명령 -writable-system 인수를 추가하면 문제 가 해결됩니다.아래와 같이 명령 행을 통해 에뮬레이터를 시작해야합니다.

 emulator.exe -avd <emulator_name> -writable-system

그런 다음 에뮬레이터에서 LAN IP 주소 및 바인딩 포트를 사용하여 호스트 시스템에서 실행되는 API 서비스에 액세스 할 수 있습니다.

http://192.168.1.2:<port>

이것이 도움이되기를 바랍니다.: 약 명령 줄에서 에뮬레이터 시작

https://developer.android.com/studio/run/emulator-commandline을

.참고 URL :

https://stackoverflow.com/questions/6760585/accessing-localhostport-from-android-emulator

반응형