Open NiSHoW opened 6 years ago
Resolving this issue actually takes two parts. @NiSHoW mentioned the first step. I confirmed it by testing that change in this fork.
The second step is fixing the plugin-build.gradle template in cordova-android. My current hacky solution is to run the following script as a cordova hook:
config.xml
<hook
comment="Update Cordova Plugin Gradle Template for Gradle 3.0+"
src="hooks/cordova-plugin-gradle-update.js"
type="after_platform_add"
/>
hooks/cordova-plugin-gradle-update.js
module.exports = function(context) {
var fs = require('fs');
var pattern = /debugCompile (project\(.*)\,.*(\))\n\s*releaseCompile.*/g;
var replacement = 'implementation $1)';
var target = 'platforms/android/cordova/lib/plugin-build.gradle';
console.log('Updating Cordova Plugin Gradle Template to work with gradle 3.0+');
fs.readFile(target, 'utf8', function (err,data) {
if (err) return console.log(err);
data = data.replace(pattern, replacement);
fs.writeFile(target, data, 'utf8', function (err) {
if (err) return console.log(err);
console.log('Updated: ' + target);
});
});
};
I'm not sure if and when cordova-android plans on fixing that. Ideally they will fix that in both versions 6.4.0 and 7.0.0. I say that because v7.0.0 introduced structural changes that I don't think most developers want to make right now.
If anyone has a better solution or knows of something that I'm missing, then please share.
Environment: Cordova-CLI: 7.0.1 Cordova-Android: 6.4.0 Gradle: 4.4.1
Sounds so complex. Thank you for sharing.
I've hit this issue and fixed it in a similar way to @renzoolguin above (many thanks!) I'm pretty new to Cordova, but I'm a bit baffled as to why this hasn't been fixed in cordova-android itself and in this project - is this an unusual bug? I'm not demanding for it to be fixed, I'm just confused as to why it hasn't been an issue for lots of other people.
One thing I found was that 'after_platform_add' seems to be called too late - when I use 'cordova prepare' this doesn't get called until after the whole project has been generated - at which point the plugin has already had the gradle file generated. I tried changing this to 'before_plugin_install' - which initially seemed to work, but I believe there's a race condition of sorts - this appears to run in parallel with the generation of the gradle configs. The ultimate fix I ended up with was to modify the generated gradle files - rather than the template, using the same code as above.
It all feels a bit dirty!
Environment Cordova: 7.0.1 Cordova-Android: 6.4.0 Gradle: 4.1
Had the same problem, fixed it thanks to the info on this thread:
However, I had to modify the hook code to avoid timing issues: by making the hook return a promise we can ensure the build won't continue until the hook is finished.
let fse = require('fs-extra');
module.exports = function(context) {
let pattern = /debugCompile (project\(.*)\,.*(\))\n\s*releaseCompile.*/g;
let replacement = 'implementation $1)';
let target = 'platforms/android/cordova/lib/plugin-build.gradle';
const deferral = context.requireCordovaModule('q').defer();
console.log('srcipts/cordovaPluginGradleUpdate: fixing gradle');
fse.readFile(target, 'utf8')
.then((data)=>{
data = data.replace(pattern, replacement);
return fse.writeFile(target, data, 'utf8')
.then(()=>{
console.log('srcipts/cordovaPluginGradleUpdate: done !');
deferral.resolve();
});
})
.catch((e)=>{
deferral.reject('srcipts/cordovaPluginGradleUpdate: error '+e);
});
return deferral.promise;
};
Thanks to everyone in the thread contributing to the install hook helping me get past some of the build issues I was having. I wanted to mention though, that using Cordova 9 causes this to break with the error:
Using "requireCordovaModule" to load non-cordova module "q" is not supported
The fix was easy enough however. Just add let q = require('q');
to the top, and then replace
const deferral = context.requireCordovaModule('q').defer();
with
const deferral = q.defer();
(or you could make it a one-liner, dealer's choice)
That said, I created a new fork in order to add several other fixes I needed for my application (including a couple others added to this hook script), and some changes to make it simpler to install/configure for others in my organization that will also need to maintain our app. Maybe it'll be of use to others as well: https://github.com/erobertson42/cordova-plugin-xapkreader/tree/cordova-9
And here is a summary of the changes: https://github.com/erobertson42/cordova-plugin-xapkreader/blob/cordova-9/README.md#changes
Thank you. I will review those some time soon. It is really annoying that everything keeps breaking, but I try to keep up now and then.
https://github.com/erobertson42/cordova-plugin-xapkreader/tree/cordova-9
And here is a summary of the changes: https://github.com/erobertson42/cordova-plugin-xapkreader/blob/cordova-9/README.md#changes
@erobertson42 thanks for sharing this! When I try to build my project I get
platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:17: error: package android.support.v4.content does not exist
I've tried adding a android.support.v4 plugin but then I get duplicate definitions.
I'm sure it's a problem in my setup, I just wondered if a simple answer is available. My output is attached below.
`Checking Java JDK and Android SDK versions ANDROID_SDK_ROOT=/Users/johnfriedman/Library/Android/sdk (recommended setting) ANDROID_HOME=/Users/johnfriedman/Library/Android/sdk (DEPRECATED) Subproject Path: CordovaLib Subproject Path: app Subproject Path: com.flyingsoftgames.xapkreader/FamilyPortal-downloader_library Subproject Path: com.flyingsoftgames.xapkreader/FamilyPortal-library
Task :app:preBuild UP-TO-DATE Task :CordovaLib:preBuild UP-TO-DATE Task :CordovaLib:preDebugBuild UP-TO-DATE Task :CordovaLib:checkDebugManifest UP-TO-DATE Task :CordovaLib:processDebugManifest UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:preBuild UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:preDebugBuild UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:checkDebugManifest UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:processDebugManifest UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:preBuild UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:preDebugBuild UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:checkDebugManifest UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:processDebugManifest UP-TO-DATE Task :app:preDebugBuild UP-TO-DATE Task :CordovaLib:compileDebugAidl NO-SOURCE Task :com.flyingsoftgames.xapkreader:library:compileDebugAidl NO-SOURCE Task :com.flyingsoftgames.xapkreader:downloader_library:compileDebugAidl NO-SOURCE Task :app:compileDebugAidl NO-SOURCE Task :CordovaLib:packageDebugRenderscript NO-SOURCE Task :com.flyingsoftgames.xapkreader:downloader_library:packageDebugRenderscript NO-SOURCE Task :com.flyingsoftgames.xapkreader:library:packageDebugRenderscript NO-SOURCE Task :app:compileDebugRenderscript UP-TO-DATE Task :app:checkDebugManifest UP-TO-DATE Task :app:generateDebugBuildConfig UP-TO-DATE Task :app:prepareLintJar UP-TO-DATE Task :app:generateDebugSources UP-TO-DATE Task :CordovaLib:compileDebugRenderscript UP-TO-DATE Task :CordovaLib:generateDebugBuildConfig UP-TO-DATE Task :CordovaLib:generateDebugResValues UP-TO-DATE Task :CordovaLib:generateDebugResources UP-TO-DATE Task :CordovaLib:packageDebugResources UP-TO-DATE Task :CordovaLib:generateDebugRFile UP-TO-DATE Task :CordovaLib:prepareLintJar UP-TO-DATE Task :CordovaLib:generateDebugSources UP-TO-DATE Task :CordovaLib:javaPreCompileDebug UP-TO-DATE Task :CordovaLib:compileDebugJavaWithJavac UP-TO-DATE Task :CordovaLib:processDebugJavaRes NO-SOURCE Task :CordovaLib:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:compileDebugRenderscript UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:generateDebugBuildConfig UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:generateDebugResValues UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:generateDebugResources UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:packageDebugResources UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:compileDebugRenderscript UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:generateDebugResValues UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:generateDebugResources UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:packageDebugResources UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:generateDebugRFile UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:generateDebugRFile UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:prepareLintJar UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:generateDebugSources UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:generateDebugBuildConfig UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:prepareLintJar UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:generateDebugSources UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:javaPreCompileDebug UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:compileDebugJavaWithJavac UP-TO-DATE Task :com.flyingsoftgames.xapkreader:library:processDebugJavaRes NO-SOURCE Task :com.flyingsoftgames.xapkreader:library:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:javaPreCompileDebug UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:compileDebugJavaWithJavac UP-TO-DATE Task :com.flyingsoftgames.xapkreader:downloader_library:processDebugJavaRes NO-SOURCE Task :com.flyingsoftgames.xapkreader:downloader_library:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE Task :app:javaPreCompileDebug UP-TO-DATE Task :app:mainApkListPersistenceDebug UP-TO-DATE Task :app:generateDebugResValues UP-TO-DATE Task :app:generateDebugResources UP-TO-DATE Task :app:mergeDebugResources UP-TO-DATE Task :app:createDebugCompatibleScreenManifests UP-TO-DATE Task :app:processDebugManifest UP-TO-DATE Task :app:processDebugResources UP-TO-DATE
Task :app:compileDebugJavaWithJavac FAILED /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:17: error: package android.support.v4.content does not exist import android.support.v4.content.LocalBroadcastManager; ^ /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:139: error: cannot find symbol LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent); ^ symbol: variable LocalBroadcastManager location: class XAPKDownloaderActivity /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:273: error: cannot find symbol LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent); ^ symbol: variable LocalBroadcastManager location: class XAPKDownloaderActivity Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/org/apache/cordova/file/AssetFilesystem.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 3 errors
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.
Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 1s 46 actionable tasks: 1 executed, 45 up-to-date /Users/johnfriedman/dev/family-portal-native/platforms/android/gradlew: Command failed with exit code 1 Error output: /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:17: error: package android.support.v4.content does not exist import android.support.v4.content.LocalBroadcastManager; ^ /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:139: error: cannot find symbol LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent); ^ symbol: variable LocalBroadcastManager location: class XAPKDownloaderActivity /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/com/flyingsoftgames/xapkreader/XAPKDownloaderActivity.java:273: error: cannot find symbol LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent); ^ symbol: variable LocalBroadcastManager location: class XAPKDownloaderActivity Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: /Users/johnfriedman/dev/family-portal-native/platforms/android/app/src/main/java/org/apache/cordova/file/AssetFilesystem.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 3 errors
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.
Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 1s `
They keep deprecating everything... But shouldn't this be in a new thread?
@Johnafriedman, I'm sorry, but I don't know how much help I can be without knowing more about your setup. However I can say that I never had to explicitly install the android.support plugin, or manually add any support dependencies to any config file(s).
Although I do have the "Android Support Repository" package installed in Android Studio, you could check to see if you have that as well. I'm not sure if it will help, but it's worth a try. I'll admit I'm fairly new to Cordova and Android development in general.
SDK Manager -> SDK Tools tab -> Support Repository
Thanks for your response and suggestion. I am new to this and wasn't sure if I should open an issue in the forked repo.
I was able to build successfully by replacing
{Project}/plugins/com.flyingsoftgames.xapkreader/src/android/XAPKDownloaderActivity.java:17
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
with
import android.support.v4.content.LocalBroadcastManager;
Very good. Teamwork makes the dream work!
@Johnafriedman I'll take a look at it and update as necessary. I currently have an Android Support issue with Crosswalk, so I'm trying to work out anything related to that. Which minimum Android Support version are you targeting?
@renzoolguin I'm afraid I don't know enough to be sure I understand the question.
I am using
"cordova": "^9.0.0",
"cordova-android": "^8.0.0",
My Android Studio > Preferences > System Settings > Android SDK | SDK Tools |
Android Support Library shows rev. 23.2.1 Support Repository | Android Support Repository shows version 47.0.0
My cordova project config.xml has these preferences:
<preference name="android-minSdkVersion" value="19" />
<preference name="android-targetSdkVersion" value="29" />
There is a new system to add dependencies build-extra.gradle file of project download-library must be change like this
see this reference: https://stackoverflow.com/questions/33718663/gradle-error-configuration-declares-dependency-which-is-not-declared