Java class files (compiled Java) can be decompiled.
Unless they ran the code through an obfuscator or something in the android dev cycle does that automatically (I don't know), you can get the full source with full variable names, more or less. The stock javac compiler doesn't do much in terms of optimization, there are a couple things it does (replaces accesses to 'final static' members with constants for example), most is left to the JIT, bytecode -> source translation is pretty straight forward and you don't lose much.
Even with obfuscation you tend to just end up with the code, but all the identifiers are replaced with a, b, c, etc.. I've still been able to figure Bluetooth protocols and other things without much trouble. For pirates, impersonators, and malware creators, they often just have to find free/pro/goods counter/license check/sig check or add in a call to their own extra code to run. So a little tougher for them, but not the end.
Comments
With android apk's can so see the complete source code of the app?
Java class files (compiled Java) can be decompiled.
Unless they ran the code through an obfuscator or something in the android dev cycle does that automatically (I don't know), you can get the full source with full variable names, more or less. The stock javac compiler doesn't do much in terms of optimization, there are a couple things it does (replaces accesses to 'final static' members with constants for example), most is left to the JIT, bytecode -> source translation is pretty straight forward and you don't lose much.
No, but you can disassemble them to see the Dalvik bytecode[1], which is not too hard to understand.
[1] http://source.android.com/tech/dalvik/dalvik-bytecode.html
You can actually reverse engineer an entire app to java code and see all the resources such as strings and images. Just takes around 10 minutes http://stackoverflow.com/questions/3593420/android-getting-s...
You can prevent this by obfuscating your code in eclipse with proguard, however most apps are not obfuscated.
Even with obfuscation you tend to just end up with the code, but all the identifiers are replaced with a, b, c, etc.. I've still been able to figure Bluetooth protocols and other things without much trouble. For pirates, impersonators, and malware creators, they often just have to find free/pro/goods counter/license check/sig check or add in a call to their own extra code to run. So a little tougher for them, but not the end.
as mentioned, you can use a dalvik decompiler. I recommend JEB: http://www.android-decompiler.com/
It's like IDA but for APKs.