qq549631030 / AndroidJunkCode

Android马甲包生成垃圾代码插件
1.09k stars 252 forks source link

混淆文件proguard-rules.pro自动生成成功,但是类修饰符没能和生成的垃圾代码的类修饰符匹配上 #70

Closed 18319557579 closed 1 year ago

18319557579 commented 1 year ago

AndroidJunkCode版本:1.3.1

gradle版本:6.1.1

AGP版本:4.0.1

JDK版本:1.8.0

productFlavors配置: buildTypes { release { debuggable false jniDebuggable false renderscriptDebuggable false minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' if (project.hasProperty("RELEASE_STORE_FILE")) { signingConfig signingConfigs.release } applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && variant.buildType.name == 'release' && outputFile.name.endsWith('.apk')) { output.outputFileName = "${PROJECTNAME}${versionName}_${releaseTime()}-release.apk" } } } externalNativeBuild { ndkBuild { arguments 'NDK_DEBUG=0' } } } debug { debuggable true jniDebuggable true renderscriptDebuggable true externalNativeBuild { ndkBuild { arguments 'NDK_DEBUG=1' } } } }

androidJunkCode配置: def config = { packageCount = 30 activityCountPerPackage = 16 excludeActivityJavaFile = false otherCountPerPackage = 26

packageCreator = { tuple2 ->

    def index = tuple2.first

    def packageNameBuilder = tuple2.second
    packageNameBuilder.append(getRandomPackageName())
}

classNameCreator = { tuple2 ->

    def index = tuple2.first

    def classNameBuilder = tuple2.second

    classNameBuilder.append(getRandomClassName())
}

activityCreator = { tuple4 ->

    def index = tuple4.first

    def activityNameBuilder = tuple4.second

    def layoutNameBuilder = tuple4.third

    def layoutContentBuilder = tuple4.fourth
    activityNameBuilder.append(getRandomActivityName())
    layoutNameBuilder.append(getRandomStringWithSection(6, 20, 0))
    layoutContentBuilder.append(getRandomLayout())
}

typeGenerator = { typeBuilder ->

    for (def i = 0; i < getRandomNum(0, 6); i++) {
        typeBuilder.addField(getRandomField())
    }

    for (def i = 0; i < getRandomNum(5, 10); i++) {
        typeBuilder.addMethod(getRandomMethod())
    }
}

resPrefix = ""
drawableCount = 1950
stringCount = 2000

drawableCreator = { tuple3 ->

    def index = tuple3.first

    def fileNameBuilder = tuple3.second

    def contentBuilder = tuple3.third
    fileNameBuilder.append(getRandomStr(2, 5, 4, 9, 0))
    contentBuilder.append(getRandomDrawable())
}

stringCreator = { tuple3 ->

    def index = tuple3.first

    def keyBuilder = tuple3.second

    def valueBuilder = tuple3.third
    keyBuilder.append(getRandomStringWithSection(6, 10, 0) + getRandomStringWithSection(0, 3, 2))
    valueBuilder.append(getRandomStringWithSection(0, 50, 2))
}

} variantConfig { debug config release config }

bug描述: 目前AndroidJunkCode的版本是1.3.1,自动生成proguard-rules.pro是没问题的,内容也有 自动生成

但是,自动生成的proguard-rules.pro内容中,类的修饰符都是public。然而我使用typeGenerator时,是没有去自定义类的修饰符的,因此AndroidJunkCode自动生成的类是没有可见性修饰符的 2

所以导致了生成的类和生成的proguard-rules.pro匹配不上。 我现在的做法是手动加了:typeBuilder.addModifiers(Modifier.PUBLIC),可以匹配上了。 后续打算优化这里吗?

qq549631030 commented 1 year ago

1.3.2已修复