直到最近我一直在使用以下
构建使用一个自定义(即由我编写)插件的混合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版本。在此过程中,我已升级到
我逐步完成了整个项目的重建
cordova create myapp ext.example.myproj MyApp
cordova platform add android
,其中添加了Cordova Android 7.0.0 cordova build android --debug
:正常工作config.xml
减去对自定义插件的引用build-extras.gradle
文件复制到myapp / platforms / android cordova plugin add 'path:\to\my\plugin
发出一个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
在依赖项中被弃用,而倾向于使用全新的指令集,例如implementation
和api
。我尝试在自己的compile
文件中将implementation
替换为build-extras.gradle
,但无济于事。
很显然,我在这里做错了,这与Gradle中的更改有关。我将不胜感激。
答案 0 :(得分:1)
在cordova-android 7.1.3中,我的拉取请求已包含在内,因此问题已解决,请参见release notes
将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相对)。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
文件。