首页 > 解决方案 > Dexguard 不加密类并在清单上产生问题

问题描述

我使用 DexGuard,在发布模式下构建项目:

proguardFile getDefaultDexGuardFile('dexguard-library-release-aggressive.pro')

一切都很好,但现在我需要阻止另一个类加密,我添加了一些行来不加密我的 ExampleBuilder:

-verbose

# do not encrypt API package
-keep public class com.justexample.api** {
public protected private *;
}

#these 3 lines below I added
-keep public class com.justexample.ExampleBuilder.** {
    public protected private static *;
}

-repackageclasses com.justexample

现在当我尝试使用库时出现错误:

error: attribute 'android:name' in <service> tag must be a valid Java class name.
Message{kind=ERROR, text=error: attribute 'android:name' in <service> tag must be a valid Java class name.

生成的清单(来自受 dexguard 影响的 AAR)是此错误的来源,错误所在的片段:

<service
        android:name="com.justexample.services.゚"
        android:exported="false" />

标签: androiddexguard

解决方案


android:name 应该具有代表活动的类路径的引用。它不能包含任何特殊字符或空格。

我相信你在 android:name 标签下的清单中你保留了一个额外的空格和句号(。)

尝试删除它并检查

<service
        android:name="com.justexample.services"
        android:exported="false" /> 

如果您的服务类有特定名称,请完整提及并检查如下

  <service
            android:name="com.justexample.services.SampleIntentService"
            android:exported="false" /> 

更新: 根据您的评论,

从 Dexgaurd 中删除此行并检查

-repackageclasses com.justexample

推荐阅读