4. Dalvik vs ART(4.4)
DALVIK ART
Compilación
Just-In-Time (JIT)
Compilación
Ahead-Of-Time (AOT)
Cache se construye a
medida que se ejecutan
las aplicaciones
Cache se construye al
arrancar el dispositivo
Apps se compilan cuando
se ejecutan
Almacena las aplicaciones
compiladas
Mayor consumo espacio
interno
Settings>Developer options>Select runtime
12. Recomendaciones en permisos
Minimizar el número de permisos que se piden
33% aplicaciones piden más permisos de los
necesarios
¿Es necesario android.permission.CAMERA?
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.DESCRIPTION, "Image capture");
contentValues.put(MediaStore.Images.Media.TITLE, "new image");
Uri uri =
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
contentValues);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, 1);
13. Permissions in apps
<uses-permission android:name="android.permission.CAMERA" />
¿Donde está el permiso?
En la aplicación Google Camera
GoogleCamera.apk
14.
15. Malware
• Instalar de orígenes
conocidos
• Comprobar los permisos
antes de instalar/actualizar
• Revisar comentarios de los
usuarios
• Deshabilitar conexión
automática a redes Wifi y
evitar conectarnos a redes
Free.
Recomendaciones
para evitar
malware
16. Malware detection in Google play
Bluebox
Security
Scanner
SRT
AppScanner
Lookout
Mobile
Security
Advanced
Mobile Care
Malwarebytes
Anti-Malware
CM Security
20. Android Studio
Tool included in Android SDK for apk compress and optimizing
$ zipalign -f 4 app-signed.apk final-app.apk
Build > Generate Signed APK
21.
22. Shared preferences
Fichero xml almacenado en
/data/data/com.your.package/shared_prefs/preferences
.xml
No es recomendable almacenar información sensible
relativa a nombres de usuario y contraseñas
Librería para securizar este fichero
https://github.com/scottyab/secure-preferences
ROOT
25. Webview best practices
Tener cuidado con librerías de terceros
No guardar passwords
No guardar datos de formularios
Limpiar Caché
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
@Override public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.clearCache(true); //delete local files in the browser
}
26. SQLite
SQLiteDatabase db = dbHelper.getWriteableDatabase();
String userQuery = "SELECT lastName FROM useraccounts WHERE
userID = ?";
SQLiteStatement prepStatement =db.compileStatement(userQuery);
prepStatement.bindString(1, "userID");
prepStatement.simpleQueryForString();
Sentencias preparadas para evitar sql injection
rawQuery
compileStatement
36. Ofuscación en proyectos android
Proguard
Integrado en el SDK
http://developer.android.com/tools/help/proguard.html
Habilitar Proguard en eclipse
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-
project.txt
37. Ofuscación en proyectos android
Habilitar Proguard en android STUDIO
build.gradle
android {
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android.txt') ,
'proguard-rules.pro'
}
}
38. Proguard.config
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
39.
40. Renombrar .apk to .zip
Extraer zip que contiene el .dex
Ejecutar dex2jar
Abrir el .jar con java decompiler
41. Apk Tool
Convierte un fichero .apk file a un projecto android
$ apktool d target.apk output_directory