Ik ben al een tijdje bezig een bepaalde Android applicatie 'opnieuw' te maken, met de bedoeling dat hij open-source wordt.
Van Android weet ik wel genoeg af om dit te laten slagen, maar soms heb ik het gevoel dat ik bepaalde 'code' verkeerd omzet vanaf de gedecompilede versie, hier een voorbeeld:
Met als volgende SMALI code (Op zich logisch wat alles daar betekent):
Maar, ik vermoed niet dat de mensen die de applicatie hebben geschreven dit hebben gedaan. Want, het lijkt me nogal een kromme manier van het probleem oplossen.
Is dit misschien net als dat je
Het volgende krijgt als je het hebt gecompiled (Om toch die String addities op te lossen?)
Want, het zou netter zijn om het dan op de eerste manier te kunnen programmeren. Dit is ook niet iets wat je echt op Google kan zoeken, aangezien ik geen idee op wat voor manier dit een optimalisatie / hack kan zijn om bepaalde dingen te laten werken.
Iemand een idee?
Van Android weet ik wel genoeg af om dit te laten slagen, maar soms heb ik het gevoel dat ik bepaalde 'code' verkeerd omzet vanaf de gedecompilede versie, hier een voorbeeld:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Class myClass = this.getClass(); Field field = myClass.getField(localName); Object currentField = field.get(this); myClass = TestObject.class; if(myClass.isAssignableFrom(field.getType())) { return; } else { if(currentField != null) { return; } else { Constructor[] constr = field.getType().getConstructors(); for(Constructor constructor : constr) { Object object = constructor.newInstance(new Object()); if(object instanceof TestObject) { mChildResult = (TestObject)object; field.set(this, mChildResult); } } } } } |
Met als volgende SMALI code (Op zich logisch wat alles daar betekent):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v4 invoke-virtual {v4, p1}, Ljava/lang/Class;->getField(Ljava/lang/String;)Ljava/lang/reflect/Field; move-result-object v3 .line 28 .local v3, field:Ljava/lang/reflect/Field; invoke-virtual {v3, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v1 .line 29 .local v1, currentField:Ljava/lang/Object; const-class v4, Lcom/test/TestObject invoke-virtual {v3}, Ljava/lang/reflect/Field;->getType()Ljava/lang/Class; move-result-object v5 invoke-virtual {v4, v5}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z move-result v4 if-eqz v4, :cond_9 .line 30 if-nez v1, :cond_9 .line 31 invoke-virtual {v3}, Ljava/lang/reflect/Field;->getType()Ljava/lang/Class; move-result-object v4 invoke-virtual {v4}, Ljava/lang/Class;->getConstructors()[Ljava/lang/reflect/Constructor; move-result-object v0 .line 32 .local v0, constr:[Ljava/lang/reflect/Constructor;,"[Ljava/lang/reflect/Constructor<*>;" const/4 v4, 0x0 aget-object v4, v0, v4 const/4 v5, 0x0 new-array v5, v5, [Ljava/lang/Object; invoke-virtual {v4, v5}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object; move-result-object v4 check-cast v4, Lcom/test/TestObject iput-object v4, p0, Lcom/test/TestObject>mChildResult:Lcom/test/TestObject; .line 33 iget-object v4, p0, Lcom/test/TestObject;->mChildResult:Lcom/test/TestObject; invoke-virtual {v3, p0, v4}, Ljava/lang/reflect/Field;->set(Ljava/lang/Object;Ljava/lang/Object;)V .line 34 iput-object p1, p0, Lcom/test/TestObject;->mChildName:Ljava/lang/String; :try_end_41 |
Maar, ik vermoed niet dat de mensen die de applicatie hebben geschreven dit hebben gedaan. Want, het lijkt me nogal een kromme manier van het probleem oplossen.
Is dit misschien net als dat je
Java:
1
| String test = "Test" + "Test"; |
Het volgende krijgt als je het hebt gecompiled (Om toch die String addities op te lossen?)
Java:
1
2
3
4
| StringBuilder builder = new StringBuilder(); builder.append("Test"); builder.append("Test"); String test = builder.toString(); |
Want, het zou netter zijn om het dan op de eerste manier te kunnen programmeren. Dit is ook niet iets wat je echt op Google kan zoeken, aangezien ik geen idee op wat voor manier dit een optimalisatie / hack kan zijn om bepaalde dingen te laten werken.
Iemand een idee?