标签: android-r8

将 asset 文件夹保留在 proguard Android 中

我正在使用proguard来混淆我的代码,并且我有一个称为库的模块,在该模块中我有一个资产文件夹,并且我保留了一些在运行时使用的 jar。我想将该资产文件夹保留在混淆器中。

这是它的结构:

在此输入图像描述

我怎样才能保留这些?或者我们如何在ProGuard中传递文件的路径?

android proguard android-r8

6
推荐指数
1
解决办法
1991
查看次数

将 Android Gradle 插件升级到 8.0.2 后使用 R8 缩小 Android 应用程序时出错

我最近将 Android 应用程序项目中的 Android Gradle 插件从版本 7.4.2 升级到 8.0.2。但是,当执行 minifyReleaseWithR8 任务时,我现在在发布构建期间遇到错误。

我收到的错误消息如下:

Task :app:minifyReleaseWithR8
AGPBI: {"kind":"error","text":"Library class android.test.AndroidTestRunner extends program class junit.runner.BaseTestRunner","sources":[{}],"tool":"R8"}
Library class android.test.AndroidTestRunner extends program class junit.runner.BaseTestRunner

AGPBI: {"kind":"error","text":"Library class android.test.InstrumentationTestCase extends program class junit.framework.TestCase","sources":[{}],"tool":"R8"}
Library class android.test.InstrumentationTestCase extends program class junit.framework.TestCase

Task :app:minifyReleaseWithR8 FAILED
Run Code Online (Sandbox Code Playgroud)

该错误似乎与缺少服务类以及库类和程序类之间的冲突有关。

这些错误是在我更新 Android Gradle 插件后才开始出现的。我已尝试清理项目并确保所有依赖项都是最新的,但问题仍然存在。

有其他人在升级到 Android Gradle Plugin 8.0.2 时遇到过类似的问题吗?如何解决这些错误并成功缩小 R8 的发布版本?

任何帮助或建议将不胜感激。谢谢你!

build proguard minify android-build android-r8

6
推荐指数
1
解决办法
1689
查看次数

Proguard (R8) 否定操作员不保留某些包以外的任何东西

proguard 中的否定符(感叹号)应该允许我保留 apache 库之外的其他内容:

-keep class !org.apache.**
Run Code Online (Sandbox Code Playgroud)

根据这些答案。这就是要走的路:

但是,它混淆了我的 APK 中的所有类。

这是我的 build.gradle 的一部分(我有 Android Studio 3.5.3)

compileSdkVersion 29
buildToolsVersion "29.0.2"
//...
buildTypes {

    release {

        minifyEnabled true
        proguardFiles /*getDefaultProguardFile('proguard-android.txt'),*/  'proguard-rules.pro'

        // Enables resource shrinking, which is performed by the
        // Android Gradle plugin.
        shrinkResources false
    }
}

dependencies {
    //Utility libs
    implementation 'org.apache.commons:commons-collections4:4.1'
    implementation 'org.apache.commons:commons-lang3:3.4'
    implementation group: 'commons-io', name: 'commons-io', version: '2.5'
}
Run Code Online (Sandbox Code Playgroud)

添加 …

android proguard apk android-r8

5
推荐指数
2
解决办法
1556
查看次数

Google Play 要求反混淆 txt 文件、Xamarin Forms

当我之前发布我的应用程序时,一切进展顺利,但现在我尝试上传我的应用程序的新版本,Google Play 说其中有一些 java/kotlin 代码,并要求我上传一个反混淆 txt 文件。我一直在寻找答案,人们提到了 android studio 在您使用 proguard 或 R8 代码收缩器时创建的“mapping.txt”文件。

有谁知道我可以在哪里生成这样的文件或者它可能在哪里?

注意:自从上次更新应用程序以来,我没有添加或升级任何 nuget 软件包,并且我已经查看了 bin/obj 文件夹,但没有成功。我还检查了捆绑应用程序时创建的存档文件夹。

xamarin.android google-play xamarin.forms android-r8 visual-studio-2019

5
推荐指数
1
解决办法
1036
查看次数

如何使用 R8 在堆栈跟踪中保留原始行号?

我正在尝试弄清楚如何使用 R8 保留原始行号。

使用当前的 AndroidStudio 制作应用程序并使用 R8 对其进行混淆,甚至将mapping.txt文件上传到 Google Play Console,用户的堆栈跟踪在某些情况下是无用的,因为崩溃的行与真实的非混淆文件中的行不同。

com.mypackage.activities.ManagerActivity.onCreate (ManagerActivity.java:3052)这是一个示例,我的类没有3000行,但是在第3052行( )报错:

Caused by: java.lang.NullPointerException: 
  at com.mypackage.activities.ManagerActivity.onCreate (ManagerActivity.java:3052)
  at android.app.Activity.performCreate (Activity.java:7136)
  at android.app.Activity.performCreate (Activity.java:7127)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2990)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3148)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1861)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6819)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:497)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:912)
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 R8 和 AndroidStudio 获取错误的真实行号?请记住,此代码已使用mapping.txt 文件进行反混淆

obfuscation android proguard android-r8

5
推荐指数
1
解决办法
1677
查看次数

升级 Gradle 插件后,XML 资源名称在发布版本中发生更改

将 Gradle 插件升级到 4.2.0 后(在此之前,我没有这个问题),在构建发布版本时,XML 资源文件的名称似乎发生了更改,例如从 更改res/xml/settings_master_switch_1.xmlres/cb1.xml.

这给我编写的库带来了问题,因为它采用 xml 中给出的资源名称,例如

<com.smp.masterswitchpreference.MasterSwitchPreference
       ..
        app:ms_includedPrefScreen="@xml/settings_master_switch_1" />
Run Code Online (Sandbox Code Playgroud)

并使用此函数查找资源 id

fun resInt(resName: String?, type: String): Int? {
                resName ?: return null
                val f = File(resName).nameWithoutExtension
                return context.resources.getIdentifier(f, type, context.packageName)
            }
Run Code Online (Sandbox Code Playgroud)

这个库的使用者可以简单地拥有

release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
Run Code Online (Sandbox Code Playgroud)

甚至minifyEnabled false产生问题。

带有演示应用程序的库可以在这里找到https://github.com/svenoaks/MasterSwitchPreference

所以我假设我必须在这个库的使用者中添加某种类型的 R8/Proguard 或 Gradle 设置才能不更改 xml 资源的名称?这个规则会是什么?

res/raw/keep.xml我尝试过定义要保留在消费者应用程序中的资源-

<resources xmlns:tools="http://schemas.android.com/tools"
 tools:keep="@xml/settings_master_switch_1,@xml/settings_master_switch_2,@drawable/ic_baseline_cake_24.xml" />
Run Code Online (Sandbox Code Playgroud)

并且这条规则在proguard-rules.pro

-verbose
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* { …
Run Code Online (Sandbox Code Playgroud)

android proguard android-gradle-plugin android-r8

5
推荐指数
1
解决办法
1177
查看次数

如何防止类的部分包名称被 ProGuard(或 R8)混淆?

假设我有以下课程:

com.example.whatever.ClassA
com.example.whatever.ClassB
Run Code Online (Sandbox Code Playgroud)

我想混淆我的类和包名称,但保留前缀com.example。考虑到这一点,混淆上述名称应该输出如下内容:

com.example.a.a
com.example.a.b
Run Code Online (Sandbox Code Playgroud)

-keeppackagenames标志,但我不想保留整个包名称 - 只是前缀。

如何才能实现这一目标?

proguard android-r8

5
推荐指数
0
解决办法
452
查看次数

Kotlin 1.6.0 的 proguard / R8 删除了数据类元数据

我有一个包含一些数据类的包,我尝试使用 Kotlin 反射在运行时访问构造函数clazz.primaryConstructor,一切都按预期工作,但是当我启用 R8 时,数据类元数据被删除,例如当我检查它是否KClass isData返回 false 时并且主构造函数也为 null,这仅在启用 R8 时发生。我尝试了一切,包括@keep向所有数据类添加注释并添加规则以将所有内容保留在模型包中,我还添加了这些规则

-keep class kotlin.reflect.**

-keep class kotlin.Metadata { *; }
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气,知道出了什么问题或如何解决这个问题吗?

示例回购协议

提前致谢。

android proguard kotlin kotlin-reflect android-r8

5
推荐指数
1
解决办法
3410
查看次数

Retrofit 迁移到 Android Gradle Plugin (AGP) 8 和 Java 17 时出现 Android 混淆问题

问题

我在从 Android Gradle Plugin (AGP) 7.4.2 迁移到 8.2 以及 Java 11 迁移到 17 时遇到混淆问题:Unable to create @Body converter for class package.api.data.device.DevicesBody (parameter #1) for method a.a

除了 API 调用之外,一切都运行良好。我将 Retrofit 2 与 Kotlin 序列化 (kotlinx.serialization) 结合使用。

// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.9.0" // Retrofit
implementation "com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2" // OkHttp Logging Interceptor

// Kotlin Serialization
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1" // Kotlin Serialization JSON
implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" // Retrofit 2 Kotlin Serialization Converter
Run Code Online (Sandbox Code Playgroud)

它正在禁用混淆minifyEnabled false或添加混淆规则-keep class ** { *; },但这当然不是一个可接受的解决方案。

我的代码

private …
Run Code Online (Sandbox Code Playgroud)

obfuscation android proguard gradle android-r8

5
推荐指数
1
解决办法
897
查看次数

Flutter构建Proguard配置规则与任何内容都不匹配

我正在运行 Flutter 发布版本并收到警告Proguard configuration rule does not match anything。完整列表见下文。

这应该提交给 Flutter GitHub 问题还是我做错了什么?

我的构建命令是:( flutter build appbundle --release --obfuscate --split-debug-info=./build/symbols 如果我删除--obfuscate标志也会发生同样的情况)

我的项目不包含任何proguard-rules.pro文件。

我的app/build.gradle配置是:

buildTypes {
        release {
            signingConfig signingConfigs.release

            ndk {
                abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64'  //, 'x86'
            }

            minifyEnabled true
            shrinkResources true
           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下构建工具和设置:

  • 摇篮8.4
  • Gradle 插件 8.1.2
  • 科特林 1.9.10
  • 爪哇17
  • ndk 版本 26.0.1909125
  • 编译SdkVersion 34
  • minSdkVersion 28
  • 目标SDK版本34

完整的警告列表

Info: Proguard configuration rule does not match anything: `-keepclassmembers class …
Run Code Online (Sandbox Code Playgroud)

proguard flutter android-r8

5
推荐指数
0
解决办法
374
查看次数