7

I'm writing Android Studio library by crerating an aar file. I installed this file on maven repository in private network. I'm trying now to enable users to know only about the classes names and method names, with the help of this question in Stackoverflow library obfuscation using proguard, but without a succeed. I succeded to do that to only a few class names and the constructor names, while the method names are obfuscating to letters (a(), b()...). Now, all is working fine when I get the library locally in build.gradle file like that

implementation(files('C:\\Users\\User\\AndroidStudioProjects\\android-app2\\app\\build\\outputs\\aar\\app-open.aar'))

but not like that

api('xx.yyy.sdk:app:1.0.0@aar') { transitive = true }

The first include show all the classes with their names and their method names, while the second show only few class names and the constructor names, as I worte before.

project's build.gradle file

buildscript {
     dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
     }
}

proguard file

#
# This ProGuard configuration file illustrates how to process a program
# library, such that it remains usable as a library.
# Usage:
#     java -jar proguard.jar @library.pro
#

# Specify the input jars, output jars, and library jars.
# In this case, the input jar is the program library that we want to process.

#-injars  in.jar
#-outjars out.jar
#
#-libraryjars  <java.home>/lib/rt.jar

# Save the obfuscation mapping to a file, so we can de-obfuscate any stack
# traces later on. Keep a fixed source file attribute and all line number
# tables to get line numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.

-printmapping out.map
-keepparameternames
-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod

# Preserve all annotations.

-keepattributes *Annotation*

# Preserve all public classes, and their public and protected fields and
# methods.

-keep public class * {
    public protected *;
}

# Preserve all .class method names.

-keepclassmembernames class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

# Preserve all native method names and the names of their classes.

-keepclasseswithmembernames class * {
    native <methods>;
}

# Preserve the special static methods that are required in all enumeration
# classes.

-keepclassmembers class * extends java.lang.Enum {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your library doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.

-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# Your library may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:

# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

app's build.gradle file

buildTypes {
        open {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-open.pro'
            consumerProguardFiles 'proguard-rules-open.pro'
        }
}

What can I do in order to resolve the issue? Thank you in advance!

Roie Shlosberg
  • 189
  • 1
  • 7
  • Similar question is asked now here https://stackoverflow.com/questions/59611861/kotlin-aar-library-w-proguard-how-to-keep-only-class-and-method-names – Roie Shlosberg Jan 07 '20 at 07:23
  • The answer to the similar question doesn't help, probably because it is importing the aar file locally, and not like in my case, in which I get it remotely. – Roie Shlosberg Jan 07 '20 at 08:53

0 Answers0