android - 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" />
解决方案
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