WebView APK készítése

 ( szilard_ | 2017. augusztus 8., kedd - 9:00 )

Sziasztok!

Szeretnék Android Studio 2.3.3-mal egy Webviewt készíteni próbaként meglévő weboldalból.
Feltelepítettem az AS 2.3.3-at, mindent úgy hagyva és elfogadva az alap és a felajánlott telepítéseket, amiket kínált.

Rengeteg YT és webes tutoriált megnéztem, megpróbáltam step by step utánuk csinálni, de nem megy. A felkínált kész projekt fájlt is importáltam, de le sem fordulnak, hibával leállnak, ráadásul tök másként néznek ki tartalmilag, mint ami egy "Empty Activity" - API 18 után elém tárul az AS 2.3.3-ban.

Ilyen egy webes tutoriál res\layout\activity_main.xml struktúrája:
https://pastebin.com/Rj8TgH2v

és ilyen, ami nálam alapból létrejön (ez futtatható, tehát a környezet szerintem jó):
https://pastebin.com/9MV2QqLE

Semmit nem tudok Android programozásból, így nem is tudom hol keressem a hibát.
Egyszerűen csak elő kell állítanom egy APK-t favágó módszerrel, nem ma kell megtanulnom.

Tudja valaki mitől más az activity_main.xml nálam?
Youtube AS 2.3.2-ben is más mint nálam!

Esetleg egy biztosan működő tutoriál?

Köszönöm a segítséget!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nem teljesen az, amit elkezdtél, de ha csak egy webview a célod, akkor ennél egyszerűbb egy cordova / phonegap megoldással megvalósítani ezt, ionic-hoz vannak tutorialok, ha nyitott vagy váltásra android studio-ról akkor nézd meg.

A https://www.appypie.com/ oldalon készítettem egyet korábban, de azzal valami nagyon nem stimmel.
Nem forgatja el a képet, és emeltdíjas SMS és hívás jogot is kér a sok egyéb mellett (Ha SIM kártyát érzékelt)

Van tapasztalatod a phonegap-pel? Ott is lesz ilyen extra jog kérés?

Koszi!

Phonegap alatt gondolom most az adobe szolgáltatását érted, azt rég néztem, de a jogokat ott is te állítottad be, ők csak a html+js+css+xml fájlokból apk-t és egyebeket generálnak neked. Ezt az appypie-t nem ismerem.

Phonegap előnye még, hogy amit azzal megetetsz (html+js+css+xml csomagot), azt cordova-val is tudod használni. Sajna webview-t nem raktam még össze cordova-ban, ezért nem tudok adni neked forrást, de ha nagyon spórolós kell, vagy csak kezdésnek ki akarod próbálni, amennyire tudom az iframe is működik cordova alatt (fixme). Vagy, van egy példa a doksiban: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/index.html#sample

Hasonló cipőben járok én is.
Csináltam egy WebView APK-t, ami tökéletesen működik. Megy a weboldal vele, van hang, teszi a dolgát. Meglepő módom még az ősöreg ACE3-as telefonon is működik.
Viszont egyre több panasz érkezik, hogy nincs hang. Megnéztem újra 2 telefonon is és VAN hang. Először nem értettem, hogy mi van, de aztán kiderült, hogy Android 7.0-nél jelentkezik a probléma.
Tudtommal ezek visszafelé kompatibilisek, tehát simán mennie kéne. Ami furcsa, hogy ezek az 7.0-sak az app telepítésekor nem kér semmiféle engedélyt, pedig a AndroidManifest.xml-ben be van állítva:

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

Ha már most így kiderült, hogy mégsem olyan egyszerű a dolog, hogyan tudom rávenni, hogy 7.0 alatt is legyen hang?

-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!

Én errefelé nézelődnék : https://developer.android.com/training/permissions/requesting.html

Ha a hatos android api level (ez 23 talán) fölé fordítod, akkor lehet, hogy 6 alatt másképp működik, mint alatta.
--
blogom

Android programozás terén nálam is ugyanaz a helyzet mint a topicindítóval, magyarul teljesen más világ :)
Itt most az a cél visszafelé kompatibilis maradjon a dolog komolyabb gányolás nélkül, de akkor ezek szerint sikerült szembesülnöm egy gyönyörű kompatibiltási problémával.
-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!

Nem teljesen erre gondoltam, de ha nem felejtem el, holnap kifejtem.

szerk.:
Évekkel ezelőtt Androidoztam utoljára, szóval nem biztos, hogy mindenben 100%-ig korrekt leszek, de.

A mainstream android fejlesztés során szerintem két helyen jöhetnek be kompatibilistási dolgok. Amikor te alkalmazást fejlesztesz Androidban, a mafinest fájlban leírod, hogy mi:
- a minSdkVersion
- a targetSdkVersion
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html

Néha változtatnak a default működésen, s ha te azt írod a manifestben, hogy (tegyükfel) a 169-es SDK version a target, akkor az Android alapértelmezettnek veszi, hogy tisztában vagy, hogy milyen változások voltak a 168-169 váltáskor: s az új kódod futhat régi platformon, bizonyos megkötésekkel.

Ha a targetSdkVersion 168, akkor az újabb Androidokon is minden ugyanúgy megy, ahogy eddig. A platform garantálja, hogy az évekkel ezelőtt írt kódod fut, s működik jól (friss androidon is)- de ha a targetSdk-t húzod feljebb, akkor elvárja, hogy az új verzió által behozott change-ket lekövesd.

A másik, ami itt lehetséges, az a play services. Amennyire én emlékszem, a Play Services-re semmilyen garanciát nem vállal a Google, hogy hosszútávon tartja a kompatibilitását. Ebben vannak olyanok, amik bizonyos szinten alap rendszer dolgok, de a Google szeretné Andriud verziótól függetlenül frissíteni - pl. a WebView, vagy okosabb helymeghatározás, etc.
Szerintem doksiban azzal kezdik, hogy ellenőrizned kell a PlayServices verziót, ha használod, s felkészülni rá, hogy nem lesz neked megfelelő.

tldr: Ha kompatibilitási dologba futottál bele, akkor azért aktívan felelős vagy. A backward compatibilityt eléggé komolyan veszi a Google is, életem első publikált Android projektje ( https://play.google.com/store/apps/details?id=com.vilmos.nagy.crapmap ) hibátlanul elindult 8.0n tegnap este - pedig évek óta nincs hozzányúlva, s emlékeim szerint a térkép meg a helymeghatározás Play Servicesből jön.

Mivel jogosultságra gyanakszol, s az változott a 6.0-ban, én megnéznék egy targetSdkVersion-t első körben. Ha az 6.0 felett van (API Level 23, https://source.android.com/source/build-numbers#platform-code-names-versions-api-levels-and-ndk-releases ), akkor én erre kezdenék vizsgálódni.
--
blogom

Közben meglett a probléma.
A weboldal időközben https lett, az arról mutató linkek egy része pedig sima http. Ez a régi androidoknál nem volt gond, de az újak meg se próbálják betölteni a http-s hangfájlokat.
Az lett a megoldás, hogy csak a WebView által használt oldal vissza lett téve sima http-re. Ha az azon lévő összes létező link https lesz (ami soha az életben nem fog megtörténni), akkor vissza lesz téve https-re a kérdéses oldal.

-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!

Közben közel sem tökéletes a dolog. Látszólag minden működik, csak ez a szerencsétlen 2 néha meg 3 szálon tölti le az audiót. Ha lestoppolom akkor csak 1 szál áll meg, a többi ugyanúgy generálja forgalmat. Ha több linket indítok illetve állítok le akkor ennek a többszöröse ragad bent a háttérben. Ugyanaz a weboldal asztali gépen akármilyen böngészőben nem csinálja ezt.

Ja, és az appban egyedi User Agent van beállítva amit használ is a HTML oldalak lekérdezésekor, de az audio lejátszásnál már önkényesen a "stagefright/1.2 (Linux;Android 4.4.4)" User Agentet használja.

Ötlet?

-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!

Igen, de ahogy látom, szépen elmegy a téma más irányba.
onPause meg onResume felé megy el a dolog, amikor nekem az a cél, hogy létre se jöjjön több kapcsolat, csak 1. És az az egy meg működjön

-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!

Ezek "normal" permission-ok. Nem kell kulon kerni ra engedelyt, telepiteskor automatan megkapja. Amugy a felhasznalo ha akarja telepites utan a beallitasokbol letudja tiltani.

Esetleg ha van egy Android 7-es telefonod, erdemes lenne megprobalni debuggolni a webappot. (https://developer.android.com/guide/webapps/debugging.html)

Azt sikerült megoldanod, hogy lehessen az oldalon két újjal zoomolni, lehessen frissíteni benne az oldalt úgy, hogy az ujjadat lehúzod az ablak tetejéről?

Az oldal felépítése olyan, hogy nem kell zoomolni, a frissítéshez pedig van erre külön gomb az oldalon.

-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!

Félre ne értsétek, de ne csináljatok légyszi több webview-s alkalmazást meglévő weboldalból az app store-ba. Van elég. Köszi.

Épp ezt akartam kérdezni: erdemes?

Nincs egy olyan app, aminek a konfigjaban van egy url? :)

Nem tudom mennyire szól nekem, de nem csinálok. :)
Ez nem egy publikus app. Annyit kell csinálnom, hogy négy tableten ne kelljen böngészőt indítani az oldalhoz.