Simulasikan konektivitas jaringan rendah untuk Android [ditutup]

228

Saya ingin menguji aplikasi saya untuk kasus-kasus konektivitas jaringan rendah. Selain berdiri di lift, apa cara terbaik untuk melakukan ini? Saya sudah mencoba membungkus telepon saya dengan aluminium foil, tetapi tidak banyak membantu.

Saya perlu mengujinya di perangkat nyata, bukan di emulator.

Maggie
sumber
1
Juga meneliti kandang Faraday . Mereka mudah dibangun.
jww

Jawaban:

119

Anda dapat menggunakan emulator untuk ini. Lihatlah halaman ini: Android Emulator . Perhatikan dua argumen berikut:

  1. -netdelay <delay>

    Setel emulasi latensi jaringan ke. Nilai default tidak ada. Lihat tabel di Emulasi Keterlambatan Jaringan untuk nilai yang didukung.

  2. -netspeed <speed>

    Atur emulasi kecepatan jaringan ke. Nilai default penuh. Lihat tabel di Emulasi Kecepatan Jaringan untuk nilai yang didukung.

    Kecepatan untuk referensi dalam meningkatkan kbps:

                            UP       DOWN
                      -------- ----------
    gsm   GSM/CSD         14.4       14.4
    hscsd HSCSD           14.4       57.6
    gprs  GPRS            28.8       57.6
    umts  UMTS/3G        384.0      384.0
    edge  EDGE/EGPRS     473.6      473.6
    hsdpa HSDPA         5760.0   13,980.0
    lte   LTE         58,000.0  173,000.0
    evdo  EVDO        75,000.0  280,000.0
    full  No limit                     
inazaruk
sumber
15
terima kasih banyak, tetapi seperti yang saya katakan, saya ingin menguji pada perangkat nyata. bagaimana saya bisa melakukan ini di htc atau ponsel samsung?
Maggie
2
Dugaan saya adalah bahwa satu-satunya cara untuk pergi, adalah memiliki router wi-fi / AP yang dapat mengontrol kecepatan jaringan. Ini lebih merupakan hal admin jaringan. Tetapi ini secara teori harus dimungkinkan.
inazaruk
78
Saya telah menggunakan lift :) tetapi semua orang
Maggie
3
Untuk mensimulasikan latensi melalui HTTP, gunakan ResponseCache.setDefault (CacheResponse baru () {...}) dan lakukan panggilan Thread.sleep (200) di sana. Ini memiliki keuntungan dikontrol secara programatik (yaitu hanya dalam satu kegiatan) dan tidak mempengaruhi proses lainnya. Namun, untuk pengujian yang lebih realistis, Anda harus menetapkan batas pada router Anda atau menggunakan tcperintah (dari busybox).
yingted
112
Mengapa ini diterima sebagai jawabannya? Pertanyaannya dengan jelas menyatakan "bukan dalam sebuah emulator"
Kyle Ivey
272

Ini mungkin terdengar sedikit gila, tetapi oven microwave berfungsi sebagai pelindung microwave. Karena itu, meletakkan perangkat Anda di dalam oven microwave (JANGAN nyalakan oven microwave saat perangkat Anda ada di dalam!) Akan menyebabkan kekuatan sinyal Anda turun secara signifikan. Itu pasti mengalahkan berdiri di dalam lift ...

Syams Shafiq
sumber
3
Wow, sekarang jika Anda bisa menyarankan saya cara untuk memasukkan diri ke dalam oven juga. Dan oven dirancang untuk melindungi 2,4 GHz. Ini mungkin tidak berfungsi untuk frekuensi yang lebih rendah. IDK!
WindRider
2
tidak bekerja di microwave saya (mis. koneksi masih layak)! Agh: |
yura
1
Jika Anda memiliki kabel USB yang terpasang, sinyal dapat menyelinap dengan cara itu. Jika ada di dalam microwave tanpa kabel sama sekali terpasang, seharusnya tidak mendapatkan sinyal. Anda harus dapat mencapai efek ini juga dengan aluminium foil, yang tidak akan melelehkan ponsel karena Anda tidak dapat mematikan ponsel secara tidak sengaja.
John Moore
Oven microwave masih merupakan pilihan yang baik jika Anda perlu memicu pemutusan langsung dan tidak memerlukan interaksi pengguna lebih lanjut, yang merupakan kasus penggunaan khusus saya.
Robert Yang
108

Karena opsi pengembang iPhone berlaku pada tethering wifi, Anda bisa mendapatkan iPhone yang telah ke iOS 6atas (dan telah diatur use for developmentsdengan xcode), mengaturnya untuk meniru profil jaringan yang diinginkan, menghubungkan perangkat Android Anda ke hotspot-nya.

masukkan deskripsi gambar di sini

Kirill Kulakov
sumber
10
Ini adalah solusi yang kami dapatkan juga. Sayang sekali bahwa ini adalah pilihan paling waras yang tersedia. Perlu dicatat dalam jawaban bahwa iPhone memerlukan koneksi 3G / seluler agar tethering berfungsi. Juga harus diperhatikan bahwa kecepatan unggah / unduh yang dibutuhkan dalam utilitas iPhone perlu dibalik sesuai dengan perangkat yang ditambatkan.
Kyle Ivey
Cemerlang! Konyol bahwa ini adalah pilihan terbaik, terutama karena emulator dapat melakukannya.
karl
Emulator iPhone dapat menambatkan WiFi?
Kirill Kulakov
Terima kasih. Bingung cara mengaturnya. Begini caranya - jika Anda menggunakan paket seluler yang mengizinkan Hotspot Pribadi. Saya menggunakan iOS 7.12 1) pergi ke PENGATURAN-> Seluler-> Personal Hotspot 2) geser Personal Hotspot beralih ke kanan sehingga berwarna hijau / aktif (dapat mengubah kata sandi jika Anda mau) 3) kembali, kembali dan gulir ke bawah ke Pengembang 4) gulir ke bawah ke Network Link Conditioner dan ketuk. geser AKTIFKAN ke kanan sehingga berwarna hijau / aktif, akhirnya pilih profil. Saya memilih "Very Bad Network". Ini memberi saya ping (2198ms) unduh (0,05Mbps) unggah (0,08Mbps) 5) Hubungkan Android Anda ke hotspot!
Anthony De Souza
1
Saya tidak bisa berhenti tertawa, tetapi ini adalah solusi terbaik untuk mensimulasikan jaringan lambat pada perangkat nyata. Terima kasih
KD.
71

Pembaruan untuk Android Studio v 1.5 atau lebih tinggi
Seperti @LouMorda disebutkan dalam komentar di bawah ini bahwa Emulatortab yang disebutkan dalam pos asli telah dihapus di Android Studio v 1.5.

Sekarang Mereka telah menempatkan pengaturan ini di Pengaturan Simulator di AVD Manager.
Untuk mengakses pengaturan ini:

  1. Pilih Tools -> Android -> AVD Manager
  2. Klik Edit AVDtombol (ikon pensil)
  3. The Network Settingsdapat diakses setelah menekan Show Advanced Settingstombol

Berikut ini screenshot bagaimana tampilannya:
Pengaturan Kecepatan Jaringan dan Latensi di Android Studio v 1.5

Posting Asli
Untuk siapa saja yang menggunakan Android Studio IDE:

  1. Pergi ke Run -> Edit Configurations
  2. Pilih Android Application -> [Your App]
  3. Pilih Emulatortab
  4. Di sini Anda dapat mengubah nilai yang berbeda untuk Network Speeddan Network Latencyuntuk mensimulasikan kecepatan dan latensi yang berbeda, dll

Atau, Anda dapat memasukkan berbagai argumen di Additional command line optionsbidang teks seperti yang disebutkan dalam jawaban @ inazaruk.

Tangkapan layar di bawah ini menjelaskan bagaimana Run Configurationtampilan layar ini :

Jalankan Layar Konfigurasi di Android Studio beta 0.8.6

Saya tahu ini agak terlambat untuk menjawab pertanyaan ini, tetapi saya harap ini membantu orang lain menghadapi masalah serupa!

Sunting
Bagi siapa saja yang menggunakan gerhana, lihat jawaban @ Abhi di bawah ini.

WARRIOR SAHAM
sumber
1
Tab ini telah dihapus di Android Studio v1.5
Lou Morda
@ S1LENT WARRIOR Apa itu latensi dan apa perbedaan antara (misalnya) "speed: edge, latency: none" dan "speed: full, latency: edge"?
Johnny Five
1
@JohnnyFive speed mengacu pada kecepatan jaringan Anda, dan latensi berarti penundaan jaringan.
S1LENT WARRIOR
45

Saya tahu ini pertanyaan lama tapi ...

Beberapa telepon saat ini memiliki pengaturan untuk memanfaatkan 2G saja. Ini sempurna untuk mensimulasikan internet lambat pada perangkat nyata.

masukkan deskripsi gambar di sini

Pkmmte
sumber
sempurna! kembali ke tepi dan unggah pada 9kbyte / dtk.
JcV
Hebat, ini sangat sesuai dengan kebutuhan saya saat ini. Di kamar saya, unggahan 200KB hampir selalu gagal pada 2G :)
Deleplace
3
Orang ini adalah MVP asli.
edwoollard
33

Bertahun-tahun lalu, hei, aku akan menggunakan metode yang sangat mudah dengan Genymotion.

  • Unduh percobaan gratis Charles: http://www.charlesproxy.com/download/

  • Pasang itu

  • KlikProxy -> Throttle Settings

  • Siapkan kecepatan HTTP throttled Anda

  • Tutup jendela itu

  • Klik Proxy -> Throttlinguntuk mengaktifkan throttle

  • Buka emulator Genymotion

  • Buka pengaturan wifi

  • Tekan lama koneksi wifi yang diaktifkan

  • Klik Modify Network

  • Klik Show Advanced Options

  • Setel ProxykeManual

  • Setel Proxy hostnameke10.0.3.2

  • Setel Portke8888

  • Klik Save

Dan sekarang jaringan Anda akan dibatasi!

VicVu
sumber
dari mana Anda mendapatkan nama host 10.0.3.2? apakah itu standar charle?
abbood
hostname haruslah komputer yang menjalankan alamat jaringan lokal Charles
MaTriXy
16

Anda juga dapat menguji konektivitas internet yang lambat pada perangkat android asli:

Diuji dengan Samsung Galaxy S8 + Android 8.0.0

Buka Pengaturan -> Koneksi -> Jaringan Seluler -> dan di bawah mode jaringan Anda dapat memilih untuk hanya menggunakan koneksi 2G atau 3G

rm -rf
sumber
15

Saya punya satu strategi untuk menyelesaikan masalah Anda. Anda dapat menggunakan aplikasi proksi untuk memodifikasi atau memantau status internet Anda. misalnya, Charles .

Anda harus mengubah konfigurasi default Charles seperti gambar berikut yang saya posting.

Buka Pengaturan Throttle Anda

Pengaturan Pengaturan Throttle Anda

Dan akhirnya, Anda akan menemukan status bersih telah dibentuk menjadi kecepatan yang lebih rendah.

Sebelum

Pengaturan setelah

Benchur Wong
sumber
2
Ini adalah satu-satunya solusi yang memadai sejauh ini: D
egorikem
8

Cara mudah untuk menguji aplikasi Anda dengan koneksi rendah / buruk di emulator:

Buka Jalankan > Jalankan konfigurasi , pilih Aplikasi Android Anda , dan di sana pergi ke tab Target . Lihatlah parameter peluncuran Emulator . Di sini, Anda dapat dengan mudah memodifikasi Kecepatan Jaringan dan Latensi Jaringan.

pgarriga
sumber
8

Ada cara sederhana untuk menguji kecepatan rendah pada perangkat nyata yang tampaknya telah diabaikan. Itu memang membutuhkan koneksi jaringan Mac dan ethernet (atau kabel lainnya).

Aktifkan berbagi Wifi di Mac, ubah komputer Anda menjadi hotspot Wifi, sambungkan perangkat Anda ke ini. Gunakan Netlimiter / Charles Proxy atau Network Link Conditioner (yang mungkin sudah Anda instal) untuk mengontrol kecepatan.

Untuk detail lebih lanjut dan untuk memahami kecepatan seperti apa yang harus Anda uji saat check out: http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor -koneksi /

James_OSM
sumber
Dengan menggunakan panel preferensi "Berbagi", Anda dapat membagikan sebagian besar koneksi ke sebagian besar lainnya. Saya mengaturnya untuk membagikan koneksi WiFi saya melalui Bluetooth. (Opsi koneksi via bluetooth tidak muncul di ponsel Android saya sampai ini diatur.)
Doug Reeder
Untuk menginstal Alat Kondisioner Tautan Jaringan: stackoverflow.com/q/9659382
Pang
7

Di Android Studio, saat menjalankan emulator:

1- Tekan tombol pengaturan di bagian bawah bilah samping emulator

2- Pergi ke Seluler

3- Setel Jenis Jaringan

Tangkapan layar

Mert Kahraman
sumber
6

Facebook membuat sesuatu yang disebut Augmented Traffic Control . Ringkasan singkat dari halaman GitHub mereka:

Augmented Traffic Control (ATC) adalah alat untuk mensimulasikan kondisi jaringan. Ini memungkinkan pengontrolan koneksi yang dimiliki perangkat ke internet. Pengembang dapat menggunakan ATC untuk menguji aplikasi mereka di berbagai kondisi jaringan, dengan mudah meniru kecepatan tinggi, seluler, dan bahkan jaringan yang sangat terganggu. Aspek koneksi yang dapat dikontrol termasuk:

  • bandwidth
  • latensi
  • paket hilang
  • paket yang rusak
  • paket pemesanan

Untuk dapat membentuk lalu lintas jaringan, ATC harus berjalan pada perangkat yang merutekan lalu lintas dan melihat alamat IP sebenarnya dari perangkat, seperti misalnya gateway jaringan Anda. Ini juga memungkinkan perangkat apa pun yang merutekan melalui ATC untuk dapat membentuk lalu lintas mereka. Lalu lintas dapat dibentuk / tidak berbentuk menggunakan antarmuka web yang memungkinkan perangkat apa pun dengan browser web untuk menggunakan ATC tanpa perlu aplikasi klien.

Anda dapat menemukannya di sini di GitHub: https://github.com/facebook/augmented-traffic-control

Mereka juga telah menulis posting blog tentang hal itu: https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/

Anirudh
sumber
6

Saya terkejut tidak ada yang menyebutkan ini. Anda dapat menambatkan melalui Bluetooth, dan memisahkannya sepuluh + meter (atau kurang dengan rintangan). Anda punya nyata koneksi yang buruk. Tidak ada microwave, tidak ada lift, tidak ada perangkat lunak yang diperlukan.

Haemin Yoo
sumber
Ini sebenarnya solusi yang baik, kecuali jika Anda memiliki koneksi Bluetooth yang sangat baik. Perlu menggunakan perangkat lama untuk ini. :)
pengembang android
5

Atau pada perangkat yang sebenarnya Anda dapat pergi ke Pengaturan -> Jaringan Seluler -> Jenis jaringan yang disukai dan memilih yang paling lambat yang tersedia ... Tentu saja ini sangat terbatas, tetapi untuk beberapa tujuan pengujian mungkin cukup.

jpm
sumber
3

UPDATE di Android studio AVD:

  1. buka pengelola AVD
  2. buat / edit AVD
  3. klik pengaturan lanjutan
  4. pilih pengaturan konektivitas yang Anda inginkan

Tidak ada gelombang mikro atau lift :)

detman
sumber
3

untuk dan pengguna mac OS Anda dapat menggunakan Network Link Conditioner yang dapat diunduh dari apple. atur sebagai AP di mac dan semua divices dapat menghubungkannya.

Anda dapat menggunakan alat open source Facebook ATC http://facebook.github.io/augmented-traffic-control/

Lucas Liu
sumber
2

Apakah Anda ingin menguji apakah tidak ada koneksi jaringan, atau hanya koneksi jaringan yang lambat? Jika yang pertama, Anda dapat pergi ke Settings > Wireless & networks > Airplane modedan mengaktifkan mode Pesawat. Itu akan memungkinkan Anda menguji tidak tersedianya jaringan pada perangkat yang sebenarnya.

David Conrad
sumber
Terima kasih, tetapi saya mencoba menguji konektivitas jaringan yang rendah. Misalnya. untuk sinyal EDGE rendah atau sesuatu seperti itu.
Maggie
Ah. Sayang sekali Anda tidak dapat mematikan 3G dan kembali ke roaming EDGE. Setidaknya, di ponsel saya Anda tidak bisa.
David Conrad
2

Buka Jalankan> Jalankan konfigurasi, pilih Aplikasi Android Anda, dan di sana pergi ke tab Target. Lakukan perubahan seperti yang ditunjukkan pada gambar.

masukkan deskripsi gambar di sini

Abhi
sumber
2

Saya berjuang dengan masalah ini selama setengah hari, akhirnya saya sampai pada solusi ini:

  • Pengujian pada perangkat nyata tidak masuk akal secara keseluruhan karena Anda harus melalui banyak hal untuk membuatnya berfungsi. Satu-satunya cara logis untuk mencapai pengujian nyata adalah membuat ponsel Anda terhubung ke jaringan seluler berkualitas rendah, seperti EDGE, jika perusahaan telepon Anda menyediakannya. Anda dapat mencoba melakukan ini dengan memutar nomor *#*#4636#*#*di aplikasi telepon

  • Emulator Android asli terlalu lambat untuk pengujian dan tidak mencapai lebih dari solusi di atas.

Cara terbaik untuk melakukannya adalah menggunakan Genymotion . Ini adalah emulator Android dengan kinerja yang jauh lebih baik daripada AVD asli dan versi untuk penggunaan pribadi gratis.

Emulator Genymotion

Setelah Anda membuat perangkat virtual di Genymotion, ikuti saja tutorial ini untuk menetapkan proxy untuk perangkat tersebut.

Jalankan server proxy pada mesin host Anda yang mensimulasikan kondisi jaringan yang buruk, seperti Crapify atau Toxiproxy (saya hanya menguji yang sebelumnya) dan Anda siap melakukannya.

Memperbarui:

Saya baru sadar Anda dapat memilih strategi yang sama dengan perangkat nyata juga. Saya merasa seperti orang bodoh karena tidak menyadarinya lebih awal. Mulai saja proxy Crapify di komputer Anda, atur proxy ponsel Anda ke alamat lokal komputer Anda dan voila, Anda punya internet jelek di ponsel Anda.

Iman Akbari
sumber
1

seperti yang disarankan oleh @VicVu Charles (atau alat proxy lainnya) adalah cara yang lebih mudah. Tetapi saya ingin menambahkan bahwa Anda dapat melakukan ini dengan perangkat Anda juga, bukan hanya genymotion atau emulator lainnya. Prosesnya akan sama:

Ubah pengaturan wifi perangkat / emulator Anda untuk menggunakan proxy manual. Dan kemudian Set Proxy hostname & port a. atur nama host sebagai ip sistem Anda (dapatkan ip pc / mac Anda menggunakan ifconfig / ifconfig) b. atur nomor port dari genymotion (periksa pengaturan proxy di charles)

PS: Perangkat / emulator Anda HARUS menggunakan wifi yang sama karena ip yang Anda gunakan kemungkinan besar akan menjadi ip pribadi.

Ankit
sumber
1
  1. Buka terminal di Android Studio dan Pergi ke ../../Android/sdk/tools. executable 'emulator' harus tersedia di sini.

  2. Jalankan ./emulator -netdelay "delay_in_millis" -avd "emulator_device_name"

    Mis: ./emulator -netdelay 60000 -avd Nexus_5_API_21

  3. Sekarang bangun aplikasi Anda dan instal di emulator.

  4. Jalankan skenario Anda di aplikasi.

Pastikan Anda memiliki perubahan kode di aplikasi yang menetapkan batas waktu untuk permintaan Anda dan menanganinya.

cgr
sumber
1

Cukup buka monitor perangkat Android dari studio Android, lalu DDMS -> Kontrol Emulator. Akan ada properti Kecepatan dan Latensi.

Lester
sumber
1

Saya menemukan netlimiter4 menjadi solusi terbaik untuk pelambatan data ke emulator. Ini memberikan kontrol granular melalui gui yang layak dan memberi Anda umpan balik grafis pada throughput data untuk setiap proses. Saat ini dalam versi beta gratis. tangkapan layar

http://www.netlimiter.com/products/nl4

Ada aplikasi yang tersedia di play store untuk melambat ke perangkat yang sebenarnya tetapi mereka membutuhkan root (saya tidak bisa memberikan saran mengenai seberapa baik mereka bekerja, jika sama sekali - YMMV.)

mencari bradybound di play store, saya tidak dapat memposting lebih dari satu tautan ..

Michael.
sumber
1

Sudahkah Anda mencoba ini? Pengaturan - Jaringan - Lainnya - Jaringan Seluler - Mode jaringan - Pilih jaringan yang disukai (2G misalnya).

Metode lain yang saya gunakan disebutkan di atas. Terhubung melalui hot spot iPhone. Semoga ini membantu.

Charlie Brown
sumber
1

Saya menggunakan proksi mitmproxy HTTPS. https://mitmproxy.org/

Mitmproxy adalah aplikasi proxy sumber terbuka yang memungkinkan memotong koneksi HTTP dan HTTPS antara klien HTTP (S) apa pun. Memungkinkan untuk memantau, menangkap, dan mengubah koneksi ini secara realtime. Ubah permintaan, respons, tajuk, ... Selain itu, Anda dapat mencegat berbagai permintaan.

misal response_delay.py :

from mitmproxy import http
from time import sleep

def response(flow: http.HTTPFlow) -> None:
    sleep(5.0)

Kemudian, menjalankan komentar ini akan menunda semua respons dari server:

mitmproxy --cert \*.asdf.at=./cert.pem --scripts response_delay.py

Di aplikasi saya saya menggunakan pinning sertifikat, jadi Anda perlu menambahkan sertifikat (pribadi + publik)

cat private.key public.key> cert.pem

Anda dapat menemukan Tutorial sederhana di sini .

Anda dapat menemukan contoh skrip lain di sini .

Manuel Schmitzberger
sumber
0

Posting yang sangat lama tetapi saya akan menambahkan dua sen saya. Saya sudah SANGAT senang dengan produk perangkat keras ini ( https://apposite-tech.com/products/linktropy-mini/ ) yang telah memungkinkan kami untuk mensimulasikan banyak kondisi dunia nyata. Untuk waktu yang lama kami memiliki tantangan mengatasi berbagai hal yang akan bekerja di emulator atau dengan mode pesawat.

Kami memiliki beberapa pengaturan profil yang berbeda dari konektivitas nol ke berbagai tahap konektivitas marginal, dengan berbagai tingkat latensi, kehilangan paket, dan kesalahan bit. Hal yang hebat tentang itu adalah kita dapat mengubahnya dengan cepat tanpa harus meluncurkan ulang aplikasi dalam sebuah emulator. Harga sepenuhnya layak untuk toko kami, dan itu mudah digunakan.

Benjamin Johnson
sumber
0

Saya perlu membatasi internet rendah di perangkat AndroidTV asli dan berdasarkan apa yang saya baca, solusi yang paling cocok adalah membatasi akses internet langsung di router saya.
Pergi ke pengaturan router (secara lokal itu seperti 192.168.0.1) -> mengatur server DHCP (jika tidak berjalan) -> pilih alamat IP perangkat dan atur batasannya;

Artem N
sumber