我使用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" />
答案 0 :(得分:0)
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