如何在Cordova插件中正确设置Proguard:确保包含所有文件?

时间:2019-07-18 10:20:34

标签: cordova plugins configuration proguard

我正在以Cordova插件的形式编写到某些本地Android代码的桥梁。我对本地代码不是很熟悉,因此担心项目结构不完全正确。

为清楚起见;我有两个项目

  1. Cordova插件-桥接到本地代码
  2. Cordova测试应用程序-一个几乎空的cordova项目,带有几个按钮,我正在尝试安装插件进行测试

注意:本机代码采用.aar文件的形式,我必须在我的插件中编写一个JavaScript接口,该接口可以访问Java类,然后可以使用.aar文件。

本机代码正在使用Proguard进行优化和混淆,当我在测试应用程序目录中运行命令“ cordova run android”时,会导致以下错误,该命令将下载插件并将其安装到项目中在我的手机上启动它:

(由于尺寸过大,我已排除了42个未解决的引用)

  

警告:有42个未解决的对类或接口的引用。          您可能需要添加缺少的库jar或更新其版本。          如果您的代码正常运行而没有缺少类,则可以取消          带“ -dontwarn”选项的警告。            http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass

     

失败:生成失败,发生异常。   *出了什么问题:任务':app:transformClassesAndResourcesWithProguardForDebug'的执行失败。

我不知道问题是什么,但是我的理论是不使用我的proguard.cfg文件。当我浏览硬盘驱动器上的文件结构时可以找到它,因此它已包含在cordova插件下载中(我在我的plugin.xml文件中将其作为资源文件引用-可能是错误的,但是我已经尝试了此处列出的大多数选项:https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html)。

以前,我已经编写了一些Java测试方法,并已在我的测试应用程序中成功安装了该插件。唯一更改的是,我添加了.aar文件,该文件依赖Proguard并导致上述构建错误。

我有以下proguard.cfg文件:

-keepclassmembers class cordova.plugin.<name>.** { *;}
-keep class cordova.plugin.<name>.** { *;}
-dontwarn cordova.plugin.<name>;.**

-keep class ch.qos.** { *; }
-keep class org.slf4j.** { *; }
-keepattributes *Annotation*
-dontwarn javax.mail.**
-dontwarn javax.naming.Context
-dontwarn javax.naming.InitialContext
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault
-dontwarn okio.**

我的项目结构如下(Cordova插件):

  • package.json
  • plugin.xml
  • proguard.cfg
  • www
    • .js
    • one.aar文件
    • two.aar文件
  • src
    • android
      • build.gradle
      • gradle.properties
      • .java
      • .java
    • ios(未实现)

我的build.gradle包含以下内容:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
"proguard.cfg"
    }
    debug {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
"proguard.cfg"
   }
}

正如开头所述,我不习惯使用本机代码,这是我的第一个cordova插件,因此我真的不知道从哪里开始调试。这是一些特别的问题:

  1. 我的插件项目结构正确吗?
  2. 在我的插件中包含proguard.cfg的正确方法是什么?
  3. 我如何知道插件在我的应用程序上安装时是否正在使用proguard.cfg?

0 个答案:

没有答案