2

My SampleApp successfully get obfuscated,but unfortunately not for pacakges,folders etc.My app contains folders with name 'service','activity','receiver','constant','db' etc under android package folder.Please help me out.

I already referred this link,but not worked for me. Obfuscate the folder structure - Android

Module level build.gradle

apply plugin: 'com.android.application'

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.22.0'
    }

}

repositories
        {
    maven { url 'https://maven.fabric.io/public' }
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.android"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0.0"
        // Enabling multidex support.
        multiDexEnabled true

    }
    buildTypes
    {
        release
        {
            debuggable false
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

    externalNativeBuild {
        cmake {
            path 'CMakeLists.txt'
        }
    }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':commons')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:recyclerview-v7:24.2.1'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:support-v4:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.squareup:otto:1.3.8'
    compile 'uk.co.chrisjenx:calligraphy:2.2.0'
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.google.android.gms:play-services:10.0.1'
    compile 'com.android.support:multidex:1.0.0'
}
apply plugin: 'com.google.gms.google-services'

proguard-rules file:

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\ANDROID-DEV\AndroidStudioSDK/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

#-ignorewarnings
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-dontshrink
-verbose

-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

#-injars bin/classes
#-injars libs
#outjars bin/classes-processed.jar
#-libraryjars libs(!META-INF/MANIFEST.MF,!META-INF/LICENSE.txt)

-repackageclasses ''
-keepattributes Signature
-printmapping out.map
-renamesourcefileattribute SourceFile



-keep public class * extends android.imgView.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

# my rules
#-repackageclasses 'myobfuscated'
#-allowaccessmodification


#-dontshrink
#-dontoptimize




# Keep fragments


# Serializables


# Native Methods



# Android Support Library



# Button methods



# Reflection

-keepclassmembers class com.elsinga.sample.proguard.SensorDescriptionFragment {

public void updateFields(com.elsinga.sample.proguard.SensorData);

}

# Remove Logging
-assumenosideeffects class android.util.Log {
    public static *** e(...);
    public static *** w(...);
    public static *** wtf(...);
    public static *** d(...);
    public static *** v(...);
}

#-libraryjars libs




# The official support library.
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
-keep class android.support.multidex.** { *; }
-keep interface android.support.multidex.** { *; }
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }

# Library JARs.

-keepattributes SourceFile,LineNumberTable
-keep class com.parse.*{ *; }
-dontwarn com.parse.**
-dontwarn com.squareup.picasso.**
-keepclasseswithmembernames class * {
    native <methods>;
}

-keep class twitter4j.** { *; }
-keep interface twitter4j.** { *; }
-keep class com.google.gson.** { *; }
-keep interface com.google.gson.** { *; }
-keep class org.xmlpull.v1.** { *; }
-keep interface org.xmlpull.v1.** { *; }
-keep class org.ksoap2.** { *; }
-keep interface org.ksoap2.** { *; }
-keep class org.kxml2.** { *; }
-keep interface org.kxml2.** { *; }
-keep class org.kobjects.** { *; }
-keep interface org.kobjects.** { *; }
-keep class com.google.android.gcm.** { *; }
-keep interface com.google.android.gcm.** { *; }
-keep class com.google.analytics.** { *; }
-keep interface com.google.analytics.** { *; }
-keep class com.google.tagmanager.** { *; }
-keep interface com.google.tagmanager.** { *; }
-keep class com.google.gson.** { *; }
-keep interface com.google.gson.** { *; }
-keep class com.google.** { *; }
-keep interface com.google.** { *; }
-keep class com.google.android.youtube.player.** { *; }
-keep interface com.google.android.youtube.player.** { *; }
#-keep class com.googlecode.flickrjandroid.** { *; }
#-keep interface com.googlecode.flickrjandroid.** { *; }

# Library projects.
#-keep class com.winjit.newslib.** { *; }
#-keep interface com.winjit.newslib.** { *; }
-keep class com.facebook.** { *; }
-keep interface com.facebook.** { *; }
-keep class bolts.** { *; }
-keep interface bolts.** { *; }
-keep class com.google.** { *; }
-keep interface com.google.** { *; }
-keep class com.viewpagerindicator.** { *; }
-keep interface com.viewpagerindicator.** { *; }
-keep class com.jeremyfeinstein.slidingmenu.lib.** { *; }
-keep interface com.jeremyfeinstein.slidingmenu.lib.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.handmark.pulltorefresh.library.** { *; }
-keep interface com.handmark.pulltorefresh.library.** { *; }
-keep class com.costum.android.widget.** { *; }
-keep interface com.costum.android.widget.** { *; }
-keep class com.nirhart.parallaxscroll.** { *; }
-keep interface com.nirhart.parallaxscroll.** { *; }
-keep class org.askerov.dynamicgrid.** { *; }
-keep interface org.askerov.dynamicgrid.** { *; }
-keep class com.melnykov.fab.** { *; }
-keep interface com.melnykov.fab.** { *; }
-keep class com.nineoldandroids.** { *; }
-keep interface com.nineoldandroids.** { *; }
-keep class com.andexert.library.** { *; }
-keep interface com.andexert.library.** { *; }
-keep class com.indris.material.** { *; }
-keep interface com.indris.material.** { *; }
-keep class com.nostra13.universalimageloader.** { *; }
-keep interface com.nostra13.universalimageloader.** { *; }
-keep class com.android.volley.** { *; }
-keep interface com.android.volley.** { *; }

-keep class com.xgc1986.parallaxpagerlibrary.** { *; }
-keep interface com.xgc1986.parallaxpagerlibrary.** { *; }

-keep class com.tooleap.sdk.** { *; }
-keep interface com.tooleap.sdk.** { *; }
-keep class me.grantland.widget.** { *; }
-keep interface me.grantland.widget.** { *; }

-keep class android.view.ext.** { *; }
-keep interface android.view.ext.** { *; }
-keep class com.getbase.floatingactionbutton.** { *; }
-keep interface com.getbase.floatingactionbutton.** { *; }
-keep class com.h6ah4i.android.widget.advrecyclerview.** { *; }
-keep interface com.h6ah4i.android.widget.advrecyclerview.** { *; }
-keep class com.astuetz.pagerslidingtabstrip.** { *; }
-keep interface com.astuetz.pagerslidingtabstrip.** { *; }
-keep class android.support.v7.widget.RoundRectDrawable { *; }
-keep class jp.wasabeef.** { *; }
-keep interface jp.wasabeef.** { *; }
-keep class com.aphidmobile.flip.** { *; }
-keep interface com.aphidmobile.flip.** { *; }
-keep class se.emilsjolander.flipview.** { *; }
-keep interface se.emilsjolander.flipview.** { *; }


-keep class com.squareup.otto.** { *; }
-keep interface com.squareup.otto.** { *; }

-keep class retrofit.** { *; }
-keep interface retrofit.** { *; }


-keep class okio.** { *; }
-keep interface okio.** { *; }

-keep class com.shemaroo.** { *; }
-keep interface com.shemaroo.** { *; }

#start crashlytics
-keep public class * extends java.lang.Exception
-printmapping mapping.txt
-keep class io.fabric..** {*; }
#end crasshlytics

#Start vmax Ads settings_help
-keep public class com.vmax.android.ads.**  { *; }
-keep class com.vmax.android.ads.mediation.partners.** { *; }
-keep interface com.vmax.android.ads.mediation.partners.** { *; }
-keep class com.vmax.android.ads.mediation.partners.** { *; }
-keep public class com.google.android.gms.**  { *; }
-keep public interface com.google.android.gms.**  { *; }
-keep class com.google.android.gms.ads.** { *; }
-dontwarn com.google.android.gms.**
 -keep class * extends java.util.ListResourceBundle { *; }
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { *; }
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; }
-keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
-keep class com.facebook.** { *; }
#End vmax ads settings_help

-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

# If in your rest service interface you use methods with Callback argument.
-keepattributes Exceptions

# If your rest service methods throw custom exceptions, because you've defined an ErrorHandler.
-keepattributes Signature


-dontwarn rx.Observable$OnSubscribe
-dontwarn rx.Observable
-dontwarn rx.Subscriber
-dontwarn rx.subscriptions.Subscriptions
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn java.nio.file.Files
-dontwarn java.nio.file.Path
-dontwarn java.nio.file.OpenOption
-dontwarn com.google.appengine.api.urlfetch.HTTPMethod
-dontwarn com.google.appengine.api.urlfetch.URLFetchServiceFactory
-dontwarn com.google.appengine.api.urlfetch.URLFetchService
-dontwarn com.google.appengine.api.urlfetch.HTTPRequest
-dontwarn com.google.appengine.api.urlfetch.HTTPResponse
-dontwarn com.google.appengine.api.urlfetch.HTTPHeader
-keep class org.spongycastle.** { *; }
-keep class org.bouncycastle.** { *; }
-keep class org.xmlpull.v1.** { *; }

-keep class com.itextpdf.** { *; }
-dontwarn org.spongycastle.**

-keep class com.daimajja.** { *; }

-dontwarn org.spongycastle.**
-dontwarn java.awt.**
-dontwarn java.xml.**
-dontwarn javax.**
-dontwarn org.apache.**

-dontwarn org.bouncycastle.**
Community
  • 1
  • 1
Vasu
  • 886
  • 2
  • 11
  • 28

1 Answers1

3

That's the expected behavior. ProGuard doesn't obfuscate classes that:

  1. Are top-level components such as Activity, Service, BroadcastReceiver, etc, as explained in this article.

  2. Have a -keep rule that match their name. For example, the class com.elsinga.sample.proguard.SensorDescriptionFragment will not be obfuscated because you have a ProGuard rule that is explicitly keeping it.

  3. Classes that are annotated with @Keep.

If you think that ProGuard should be obfuscating a certain class (e.g. com.example.SomeClass) but for some reason it's not, then you can add a -whyareyoukeeping com.example.SomeClass to your ProGuard configuration file to make it print the reason why obfuscation is not being performed.

Community
  • 1
  • 1
Mike Laren
  • 8,028
  • 17
  • 51
  • 70