Service der bestimmte Ressourcen eines anderen Apps filtert und ausgibt

  • Antworten:19
Homer Simpson
  • Forum-Beiträge: 48

27.04.2011, 02:02:07 via Website

//edit
Sorry... hatte es zuerst ins fasche Forum gestellt!!!

..................

Hi

Da ich nun "fast" mit dem Studium fertig bin, möchte ich mein erstes "nicht Test"-App erstellen...

Da es trotzdem noch reine Übung ist, möchte ich noch kein App in den Market stellen. Um aber ein "Ziel" zu haben welches ein entsprechendes Resultat erfordert, aber auch motivation geben sollte... hab ich mir folgendes überlegt:

Im Spiel "Pocket Empire" bin ich recht aktiv gemeinsam mit der Ally....

Ich hab mir gedacht, dass ich ein App mache, welches uns hilft im Spiel eine besseren Überblick zu haben und vorallem die Kommunikation (Standorte, Truppen ect.) miteinander verbessert.

Dazu hab ich eigentlich auch keine Fragen...


Aber beim Herumgrübeln und Nachdenken, kam mir die Frage auf, ob ich evt, automatisch gewisse Informationen des Spiels abfangen könnte und in mein App speisen.

Z.b

Ich lasse in einem "Truppen-Produktions-Gebäude" eine gewisse Anzahl truppen herstellen. Das Spiel schickt dies an die Datenbank und ich erhalte einen Countdown welches zeigt wann die Truppen fertig produziert sind.

Wenn ich nun mit einem Service genau auf eine solche Ressource (Angabe in form eines Strings) lausche und dies in mein App speien könnte wäre dies genial!!!

Jedoch stellen sich nun folgende Fragen bei mir:

1. Ist es überhaupt möglich in das geschehen eines Apps mit einem anderen App rein zu pfuschen??? Also ich würde ja nur "informationen" rauskopieren und nicht mit den daten rum Cheaten!

Wenn Nein..... könnte es auch ne andere möglichkeit geben...nähmlich den "Netzwerk-verkehr" nach der gewünschten Angabe zu duchsuchen (ebenfals ein Service, den man abschalten und einschalten kann)

2.1 Ins App rein pfuschen (fällt weg wens garnicht geht :)

Wie kann man den ins geschehen eines Apps auf "Code basis" reinschauen? Ich hab versucht mit "LogCat" rein zu schauen.... jedoch zeigt dies nur begrenzt an was gerade gemacht wird auf dem Device... gibt es da ne möglcihket? Vorallem die Strings welche vom Netzwerk kommen (incl id ect,) wären für mich interessant!!!

2.2 Netzwerkverkehr überprüffen

Hier eigentlich die selbe frage wie bei 2.1... auf dem PC wüste ich wie (FirFox Plugin) aber auf dem Androiddevice???
Wie kann ich den gesammten Netzwerkverkehr anschauen um dann die Daten zu analysieren? Es wäre sozusagen nur ein "Laufband", dass nichts verändert, sondern nur schaut und die richtigen "Daten" rauskopiert und in mein App speichert!!!

Ich denke dies wäre sogar die leichtere und vorallem "nicht illegale" variante... da man wohl kaum "legal" in andere Software pfuschen darf, auch wenn ich nichts cheate!!!


Es wäre wirklich nett, wenn jemand helfen könnte ;)

Danke

gruss by_homer

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

27.04.2011, 07:58:01 via Website

Wenn das betreffende Gerät gerootet ist, dann kannst Du theoretisch den Netzwerkverkehr abfangen und auf Inhalte scannen. Ohne Root keine Chance. Wäre im Grunde das gleiche was eine Firewall namens DroidWall macht, die funktioniert bspw. auch nur mit Root.

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

07.05.2011, 18:56:08 via App

Also ich habs eigentlich schon aufgegebe.... jedoch fand ich kürzlich das App "catlog" welches gleich wie logcat auf eclipse den Log anzeigt.

der HTTP-Verkehr wird dort auch angezeigt! Also genau das was ich brauche!

Dieses App läuft auch ohne root!

Kann mir jemand nen tipp geben, wie ich auf einen grünen zweig komme bei dieser Angelegenheit?
Ich komm nicht drauf, wie ich die selbe funktionalität wie "catlog" nachbauen kann....

Ich gehe davon aus es ist simpel, da es haufenweise solche apps im market gibt!

Bitte bitte um hilfe...

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

07.05.2011, 19:13:18 via App

Hey,
es gibt sogar haufenweise opensource Apps, deren Code einsehbar ist :)
Ich such sonst nachher nochmal ein, zwei Links dazu raus und stell sie hier rein..
Lg Ansgar

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

07.05.2011, 19:22:48 via Website

aLogcat, was Du sicherlich meinst, zeigt Dir lediglich die Ausgabe eines Systemweiten Debug Logs an. EIne App kann dort, muss aber nicht dort hineinschreiben.

Die echten Daten, welche von der App abgerufen werden, wirst Du dort vermutlich nicht finden.

Edit: Hab gerade gesehen es gibt eine App "Catlog", die macht aber genau das selbe. Eine Ausgabe des Logcat ..

— geändert am 07.05.2011, 19:25:30

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

07.05.2011, 22:02:03 via Website

Hei danke danke danke viiiiel mals!!

Also ich habe in der zwischenzeit (um nicht nur rum u hocken) einfach die gespeicherten "txt" von catlog in meinem App eingelesen und weiter verarbeitet!!

Es funktioniert ;)

Die HTTP-POST's verden im Log angezeigt!!!


Jetzt hab ich da ne kleinigkeit, die mich zum verzweifeln bringt! Ich versuche mit RegEx die nötigen Angaben rauszufiltern...

Der inhalt sieht so aus:

[{"XXX":..................................}]}]

(wobei die vielen Punkte hier irgendwelche Angaben sind.... welche ich aber alle benötige! Alles davor und danach muss in der Zeile gelöscht werden!


Dies ist mein Pattern:

1Pattern pattern = Pattern.compile("\[\{"XXX"]*\}\]\}\] ");

Ich escape also die "[" und "{"

jetzt findet mein eclipse dies garnicht toll!!! Einerseits möchte es, dass ich die " bei "XXX" escape. Jedoch hab ich im Internet nirgends gesehen, dass man Gänsefüschen escapen muss!

Aber das ist noch nicht alles!!! Die [ und { widerum lässt er nicht "escapen".... sobald ich ein Backslash rein mache, gibt es ne fehlermeldung!!!

kann dies jemand für mich aufklären? Ich habe bald ein Nervenzusammenbruch.

gruss by_homer

und nochmals DANKE

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

07.05.2011, 23:08:08 via App

tut mir leid wenn ich wirklich nichts dazu beisteuern kann, aber kannst du mir mal den Codeschnipsel schicken, mit dem du die txt Datei ausliest?
Habe das nicht hinbekommen...

Antworten
Homer Simpson
  • Forum-Beiträge: 48

08.05.2011, 00:55:22 via Website

Hiermit kann man eine datei speichern und sie wider auslesen! (Ausgelesen wird sie in einem EditText... kann man aber überall sonst einfügen)

auf Zeile 37/38 (Activity) ist noch der Code, wenn du von und auf die SD karte schreiben möchtest!!! Dann musst aber die zeile davor auskommentieren oder löschen!

Der Code hier schreibt aufs "Telefon-Verzeichniss"


Das Layout:



1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:orientation="vertical"
7 android:padding="10dip"
8 >
9 <TextView
10 style="@style/TextUeberschrift"
11 android:text="@string/tx_daten_dateisystem"
12 />
13 <LinearLayout
14 android:layout_width="fill_parent"
15 android:layout_height="wrap_content"
16 >
17 <Button
18 android:id="@+id/sf_daten_dateisystem_laden"
19 android:layout_width="wrap_content"
20 android:layout_height="wrap_content"
21 android:text="@string/sf_daten_dateisystem_laden"
22 android:layout_weight="1"
23 android:onClick="onButtonClick"
24 android:enabled="false"
25 />
26 <Button
27 android:id="@+id/sf_daten_dateisystem_speichern"
28 android:layout_width="wrap_content"
29 android:layout_height="wrap_content"
30 android:text="@string/sf_daten_dateisystem_speichern"
31 android:layout_weight="1"
32 android:onClick="onButtonClick"
33 />
34 </LinearLayout>
35 <EditText
36 android:id="@+id/ed_daten_dateisystem_text"
37 android:layout_width="fill_parent"
38 android:layout_height="wrap_content"
39 android:layout_weight="1"
40 android:gravity="top"
41 android:typeface="monospace"
42 />
43</LinearLayout>


Die Activity:

1import java.io.BufferedReader;
2import java.io.File;
3import java.io.FileInputStream;
4import java.io.FileNotFoundException;
5import java.io.FileOutputStream;
6import java.io.IOException;
7import java.io.InputStreamReader;
8import java.io.OutputStreamWriter;
9
10import android.app.Activity;
11import android.os.Bundle;
12import android.os.Environment;
13import android.view.View;
14import android.widget.Button;
15import android.widget.EditText;
16import eu.androidtraining.dashboard.R;
17
18public class Dateisystem extends Activity {
19
20 private EditText textEingabe;
21
22 private final String DATEINAME = "test.txt";
23 private final String VERZEICHNISNAME = "testdir";
24
25 private File verzeichnis;
26 private File datei;
27
28 private Button mButton;
29
30 @Override
31 protected void onCreate(Bundle savedInstanceState) {
32 super.onCreate(savedInstanceState);
33 setContentView(R.layout.daten_dateisystem);
34 textEingabe =
35 (EditText) findViewById(R.id.ed_daten_dateisystem_text);
36 verzeichnis = getDir(VERZEICHNISNAME, MODE_PRIVATE);
37 // Variante für Schreiben auf SD-Karte
38// verzeichnis = Environment.getExternalStorageDirectory();
39 datei = new File(verzeichnis, DATEINAME);
40 mButton = (Button) findViewById(R.id.sf_daten_dateisystem_laden);
41 mButton.setEnabled(datei.exists());
42
43 // Datei löschen
44// datei.delete();
45// datei.deleteOnExit();
46
47 // Berechtigungen prüfen
48// datei.canExecute();
49// datei.canRead();
50// datei.canWrite();
51 }
52
53 public void onButtonClick(View view) {
54 switch (view.getId()) {
55 case R.id.sf_daten_dateisystem_laden:
56 try {
57 FileInputStream fileIn =
58 new FileInputStream(datei);
59 try {
60 dateiLaden(fileIn);
61 } catch (IOException e) {
62 e.printStackTrace();
63 }
64 } catch (FileNotFoundException e1) {
65 e1.printStackTrace();
66 }
67 break;
68 case R.id.sf_daten_dateisystem_speichern:
69 try {
70 FileOutputStream fileOut =
71 new FileOutputStream(datei);
72 try {
73 dateiSpeichern(fileOut);
74 textEingabe.setText("Datei gespeichert.");
75 } catch (IOException e) {
76 e.printStackTrace();
77 }
78 } catch (FileNotFoundException e) {
79 e.printStackTrace();
80 }
81 break;
82 }
83 }
84
85 private void dateiLaden(FileInputStream fileIn) throws IOException {
86 BufferedReader fileInBuffer =
87 new BufferedReader( new InputStreamReader(fileIn));
88 String text = "";
89 String zeile;
90 try {
91 while ((zeile = fileInBuffer.readLine()) != null) {
92 text += zeile;
93 }
94 } catch (IOException e) {
95 e.printStackTrace();
96 } finally {
97 fileInBuffer.close();
98 }
99 textEingabe.setText(text);
100 }
101
102 private void dateiSpeichern(FileOutputStream fileOut) throws IOException {
103 OutputStreamWriter writer =
104 new OutputStreamWriter(fileOut);
105 String text =
106 textEingabe.getText().toString();
107 try {
108 writer.write(text );
109 mButton.setEnabled(true);
110 } catch (IOException e) {
111 e.printStackTrace();
112 } finally {
113 if (writer != null) {
114 writer.close();
115 }
116 }
117 }
118}

— geändert am 08.05.2011, 00:58:51

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

08.05.2011, 01:11:58 via Website

luhu ...

verwende besser diese Version .. die ist um einiges schneller ..

Die Verwendung von String Concatenation mit "+=" ist extrem langsam bei der Verwendung in Schleifen, insbesondere bei vielen Durchläufen. Hier sollte man besser die von Java bereitgestellten appender Methoden verwenden, die bereits Zeit und Speicher optimiert sind.

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

08.05.2011, 02:53:34 via Website

Also kann ich mit dieser Methode "Zeile" für "Zeile" auslesen... aber ich möchte nur einen Teil dieser Zeile benutzen!

Ich muss also am Anfang und am Schluss erstmal einen Teil der Zeile löschen... danach muss ich noch schauen, ob dort steht: [{"XXX"............}]}] oder [{"YYY"...........}]}]

Dafür benötige ich doch regex...oder geht das anders???

schade sehe ich deinen Beitrag erst jetzt... wird wohl Morgen werden, bis ich ne Antwort bekomme :(


ps: der obige Code ist nicht derjenige, den ich hier verwende... aber ich habe dies mit "+=" gemacht... danke ;)

gruss by_homer

— geändert am 08.05.2011, 02:57:46

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

08.05.2011, 10:07:59 via Website

Du benötigst nicht zwingend Regular Expressions .. .

Du könntest das auch zum Beispiel so machen:
[quote]
if (line.startsWith("[{\"XXX\"")) {

//Hier kann jetzt entweder weiter verarbeitet oder gespeichert werden

}
[/quote]

Schau Dir doch einfach mal an, welche Methoden Dir die Klasse Java.lang.string so bietet. Zumindestens ist das für Anfänger einfacher als die doch eher komplexe Welt der regular Expressions.

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

08.05.2011, 13:47:38 via App

ja dies kenne ich... gibt auch einen fürs ende!

Problem ist, dass am anfang, die ersten 20 zeichen immer völlig verschieden sind (Datum und Zeit des Logs in millisekunden)

deshalb kann ich diesen teil nur mit regex raus parsen!

Ausser du kennst ne möglichkeit, wie ich die ersten 20 zeichen (jede zeile gleich viel) aus einem string entferne!


Mitlerweile, hab ich rausgefunden, dass ich ein [ doppelt escapen muss. also mein pattern funktioniert soweit! jedoch bekomme ich das schreiben des "matcher" nicht hin!
Hier mein code:


[code]Pattern pattern = Pattern.compile("\\[\\{\"XXX\"]*\\}\\]\\}\\]");
Matcher matcher = pattern.matcher(zeile);
String gematcht = matcher.toString();[/code]

die Ausgabe ist irgendwie: java.util.regex @xxxxxxxx (die xxxx stehen für irgend eine Zahl, die immer anders ist!

ich glaube, dass ich mit "toString()" nicht richtig liege... aber gestern war der zweite Abend, denn ich rum gegoogelt hab und trotzdem keine Lösung gefunden hab!

:(

//warum kann ich die Code-tags nicht verwenden?
1???

— geändert am 08.05.2011, 13:59:56

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

08.05.2011, 13:59:21 via Website

Och Menno ganz ehrlich mal, liest Du das was man Dir hier schreibt eigentlich auch?

Der Link den ich Dir in meinem letzten Posting geschrieben habe beschreibt genau alles das was Du suchst. Es gibt fix fertige Methoden für genau das.

Du kannst doch nicht ernsthaft erwarten das andere für Dich Denken.

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

08.05.2011, 14:17:32 via Website

Glaub mir bitte, dass ich mehr als nur ein oder 2 mal mir die String-Funktionalitäten angeschaut habe!!!

jedoch fand ich dort nichts, dass mir weiter hilft! Oder ich konnte es nicht richtig intepretieren....


Aber dass ich nicht "Denke" oder mich nicht darum bemühe selber eine Lösung zu finden, kannst du mir nicht Vorwerffen!!!

Dafür hab ich echt zu viel Zeit investiert, als dass ich dir nun nicht widerspreche... bitte entschuldige diese Anmassung die ich mir erlaube.


Ich hänge da einfach fest... und egal was ich mache, es will nicht funktionieren! Sonst löse ich meine Probleme viel schneller und dieses hier ist im vergleich der Komplexität zu anderen vergangenen Problemen NICHTS!

Trotzdem bleibt der Hund vergraben....

Ich wäre dier sehr dankbar, wenn du mir die Methode nennen könntest! Ich finde nichts, dass mir eine gewisse Anzahl Zeichen eines Strings am anfang weg macht.

gruss by_homer

— geändert am 08.05.2011, 14:23:29

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

08.05.2011, 14:44:28 via Website

Deinstring = "01234567890abcdefg";
Deinstring = Deinstring.substring(10);

liefert: "abcdefg"

Quelle: http://developer.android.com/reference/java/lang/String.html

String substring(int start)
Returns a string containing a suffix of this string.

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

08.05.2011, 18:25:32 via App

Danke!

Auf der developer seite, könnten sie ruhig mehr beispiele bringen... so wie "selfhtml" und co.

Dann könnte ein Begriff-Laie wie ich dies auch nachvollziehen!

Auch jetzt wo ich es weiss, ist der text fürmich nicht verständlich....

egal... dank dier hab ich es jetzt! ^^

gruss by_homer

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

08.05.2011, 18:45:58 via Website

Ich empfehle mal als Grundlage das Kapitel 4.2 aus dem Buch Java ist auch eine Insel

Da gehts nur um Strings ...

In der Android Java Doc wirst Du dazu keine Beispiele finden. Das sind Java Basics und keine Besonderheiten von Android.

lg Voss

Antworten
Homer Simpson
  • Forum-Beiträge: 48

11.05.2011, 03:53:31 via Website

Dein Link ist Gold wert!!!

DANKE

Ich frage mich, warum Google diese Seite nie ausgespuckt hat?!? Ich habe auch nach "Java String" gesucht...

na egal.

gruss by_homer

Antworten