升级工具链后,Cordova CLI项目将忽略构建扩展

时间:2018-09-19 15:10:19

标签: android cordova gradle cordova-cli

直到最近我一直在使用以下

  • 科尔多瓦Android 6.3.0
  • 4.9级
    • 节点8.9.2

构建使用一个自定义(即由我编写)插件的混合Android应用。该插件又具有许多外部依赖关系,这些依赖关系是通过下面列出的 myapp / platforms / android / build-extras.gradle 文件指定的。

ext.postBuildExtras = 
{
 android
 {
  dependencies
  {
   compile 'com.squareup.duktape:duktape-android:1.3.0'    
   compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
   compile 'co.realtime:messaging-android:2.1.+'
   compile 'com.google.android.gms:play-services-location:15.0.1'
   compile 'com.android.installreferrer:installreferrer:1.0'
  } 
  defaultConfig
  {
   jackOptions {enabled true}
  }
  compileOptions 
  {
   sourceCompatibility JavaVersion.VERSION_1_8
   targetCompatibility JavaVersion.VERSION_1_8
  }
  allprojects
  {
   compileOptions
   {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
   }
  }
 }
}

我以最低SDK级别设置为23的Android SDK 26为目标。我的Cordova config.xml文件如下所示

<?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="1190" android-versionName="Etoile-2" 
 id="my.app.id" version="1.1.9" xmlns="http://www.w3.org/ns/widgets" 
 xmlns:cdv="http://cordova.apache.org/ns/1.0">
 <name>My App</name>
 <description>My App</description>
 <author email="someone@gmail.com" href="https://example.org">My Name. 
 </author>
 <content src="index.html" />
 <access origin="*" />
 <icon platform="android" qualifier="mdpi" src="res/mdpi.png" />
 <icon platform="android" qualifier="hdpi" src="res/hdpi.png" />
 <icon platform="android" qualifier="xhdpi" src="res/xhdpi.png" />
 <icon platform="android" qualifier="xxdpi" src="res/xxdpi.png" />
 <icon platform="android" qualifier="xxxdpi" src="res/xxxdpi.png" />
 <allow-intent href="http://*/*" />
 <allow-intent href="https://*/*" />
 <allow-intent href="tel:*" />
 <allow-intent href="sms:*" />
 <allow-intent href="mailto:*" />
 <allow-intent href="geo:*" />
 <platform name="android">
     <allow-intent href="market:*" />
     <FrameLayout android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      xmlns:android="http://schemas.android.com/apk/res/android">
    </FrameLayout>
    <preference name="android-minSdkVersion" value="23" />
    <preference name="android-targetSdkVersion" value="26" />
 </platform>
 <preference name="Orientation" value="portrait" />
 <plugin name="ext.org.plugin" spec="path:\to\my\plugin" />
 <engine name="android" spec="^7.0.0" />
</widget>

我正在配置一台更现代的Windows PC以执行我的Android版本。在此过程中,我已升级到

  • 科尔多瓦Android 7.0.0
  • 4.10.0版(通过Scoop安装)
  • 节点10.10.0

我逐步完成了整个项目的重建

  1. 创建一个新的Cordova CLI项目cordova create myapp ext.example.myproj MyApp
  2. 添加Android平台cordova platform add android,其中添加了Cordova Android 7.0.0
  3. 构建此虚拟应用cordova build android --debug:正常工作
  4. 用我的版本(如上所示)替换默认的Cordova config.xml减去对自定义插件的引用
  5. 重新构建-仍在工作
  6. 将我的原始build-extras.gradle文件复制到myapp / platforms / android
  7. 重新构建-仍在工作
  8. 添加我的自定义插件cordova plugin add 'path:\to\my\plugin
  9. 发出一个cordova clean,后跟cordova build android,这会导致

    的错误

    :app:compileDebugJavaWithJavac路径:\ to \ my \ app \ platforms \ android \ app \ src \ main \ java \ ext \ example \ plugin \ BCTrailer.java:4:错误:包net.sqlcipher不存在 导入net.sqlcipher.Cursor;

似乎暗示我的build-extras.gradle文件的内容在构建期间未使用。我故意遗漏了括号以使XML无效,从而损坏了该文件。如果正在读取文件,我希望Gradle会抱怨。相反,它只是继续执行并发出相同的错误,例如package net.sqlcipher不存在等。

我注意到有一种说法,compile在依赖项中被弃用,而倾向于使用全新的指令集,例如implementationapi。我尝试在自己的compile文件中将implementation替换为build-extras.gradle,但无济于事。

很显然,我在这里做错了,这与Gradle中的更改有关。我将不胜感激。

2 个答案:

答案 0 :(得分:1)

更新:已在cordova-android 7.1.3中修复

在cordova-android 7.1.3中,我的拉取请求已包含在内,因此问题已解决,请参见release notes

对于cordova-android> = 7.0.0但<7.1.3

build-extras.gradle移动(或复制)到platforms/android/app/

旧答案:

我有一个类似的问题。从cordova-android 7.0开始,cordova更改了目录结构,并错过了其中的代码。

要使build-extras.gradle重新工作,只需将其移动或更好地复制(当cordova-android再次遵循其文档时)到platforms/android/app/

这里是issue,这里与pull request相关

答案 1 :(得分:0)

尽管我仍然不了解我在尝试升级Android APK构建工具链时遇到的问题的根本原因,但我现在在这里分享了一个解决方案,以使其他发现此线程的人受益。

>
  • 对于build-extras.gradle文件夹中的myapp/platforms/android,使用Cordova Android 7.0.0(与我之前使用的6.3.1相对)。
  • 无论如何,通过APK项目本身中的build-extras文件开始声明插件依赖关系都是不正确的。
  • 尽管这在升级工具链之前一直对我有用,但我发现奇怪的是,在build-extras.gradle **ext.postBuildExtras**中声明的依赖项正在努力在插件中引入外部依赖项,而该插件将被认为是到那时已内置到应用程序中。
  • 我尝试将依赖项声明切换为实际的插件中的build.gradle文件。但是,这并没有改变结果-依赖项没有使其进入构建版本,结果插件中Java单元中的各种import path.to.external.dependency声明都引发了错误。
  • 我删除了build.gradle文件,并通过<framework src='path/to/dependency' />文件和Bingo中的一系列plugin.xml依赖项声明了依赖项! -一切正常。

作为旁注-使用Cordova Android 7和高于Node 9.0的任何版本,您不再需要使用现已弃用的Jack编译器,或执行任何其他工作来说服Gradle / Android / Cordova使用Java 8。不再在我的应用中使用build-extras.gradle文件或在插件中使用build.gradle文件。