Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<preference name="android-targetSdkVersion" value="30" /> not working and keep asking for 29 #1178

Closed
2 of 3 tasks
almothafar opened this issue Mar 26, 2021 · 24 comments · Fixed by #1212
Closed
2 of 3 tasks
Labels

Comments

@almothafar
Copy link

almothafar commented Mar 26, 2021

Bug Report

Problem

It seems setting targetSdkVersion to 30 not working, it sounds like the same issue as the one closed #846 , I set <preference name="android-targetSdkVersion" value="30" /> in config.xml and I installed only platform-30 it keeps asking me to install version 29:

#13 394.1 Checking the license for package Android SDK Platform 29 in /opt/android-sdk-linux/licenses
#13 394.1 License for package Android SDK Platform 29 accepted.
#13 394.1 Preparing "Install Android SDK Platform 29 (revision: 5)".
#13 394.1 Warning: Failed to read or create install properties file.
#13 394.2
#13 394.2 FAILURE: Build failed with an exception.
#13 394.2
#13 394.2 * What went wrong:
#13 394.2 Could not determine the dependencies of task ':app:bundleReleaseResources'.
#13 394.2 > Failed to install the following SDK components:
#13 394.2       platforms;android-29 Android SDK Platform 29
#13 394.2   Install the missing components using the SDK manager in Android Studio.

There is no other information to put but it is the same issue as #846 nothing new.

Version information

What are relevant versions you are using?
Latest everything, Cordova 10 and cordova-android 9.0.0

Checklist

  • I searched for existing GitHub issues
  • I updated all Cordova tooling to most recent version
  • I included all the necessary information above
@breautek breautek added the bug label Mar 28, 2021
@goodjun
Copy link

goodjun commented Apr 4, 2021

you can try

cordova platform add android@version

@almothafar
Copy link
Author

almothafar commented Apr 4, 2021

@goodjun You totally missed the point, I have it already on the latest version (9.0.0) the problem is that the build process is ignoring the target platform, which is can be set and changed manually from Android studio but not in the command line, as for me I do that using Dockerfile.

You can refer to https://github.com/capellasolutions/ionic-cordova-docker use develop branch if you want to see this issue.

@breautek
Copy link
Contributor

breautek commented Apr 4, 2021

I think this might be a cosmetic issue. I was using this the other day and despite the cordova build output stating using android-29, the final output of both an apk or app bundle still produced api 30 package.

Are you able to confirm you see the same behavior?

@almothafar
Copy link
Author

@breautek I edited my last comment to @goodjun

Also, the build itself doesn't complete at all, I just have platform-30 installed not 29, make sure you don't have both, and try to build, it keeps asking for 29 to be installed and trying to install it.

@almothafar
Copy link
Author

@breautek Ok I got what you are saying, so it seems the value is not ignored:

image

That's If I installed 29, but If I installed platform 30, I get the error.

@almothafar
Copy link
Author

almothafar commented Apr 4, 2021

I saw the following lines in generated build.gradle file (note that I installed build-tools version 30.0.3, not 29.0.2):

image

And in the project.properties file:

image

So is this the reason behind the issue?

Are these issues related? #660 and #686

@almothafar
Copy link
Author

@breautek I just updated develop branch here https://github.com/capellasolutions/ionic-cordova-docker/tree/develop so you can run build-mobile.sh and choose Android when it asks for it and you will see that issue:

image

@shanlin2dltk
Copy link

Adding to the importance of resolving this issue is very soon Google store won't accept submission of sdk level less than 30.

@AuTiiTo
Copy link

AuTiiTo commented Apr 5, 2021

We'll need to update this version in the near future.

@breautek
Copy link
Contributor

breautek commented Apr 6, 2021

Adding to the importance of resolving this issue is very soon Google store won't accept submission of sdk level less than 30.

This is not related to this issue. Targeting API 30 still works via android-targetSdkVersion preference, so that's not a problem. Additionally we will bump our default target SDKs on our major releases to match the requirement of Google Play store.

The issue described in this ticket is Cordova will still attempt to the default platform SDK (currently API 29) even when targetSdkVersion is set to a different API level. So the current workaround is to simply have both platform 29 & 30 installed.

I've had a chance to do some digging on the cause and I've found 3 things that Cordova tooling must do:

(1) Ensure compileSdkVersion matches targetSdkVersion

compileSdkVersion is the SDK that the application is compiled against, while the targetSdkVersion is an assertion that you've tested your application at the target SDK level for compatibility. If the platform API level is higher of the target, then the platform will enable backwards-compatibility behaviours.

There isn't any real reason to have a compileSdkVersion set that is different than the targetSdkVersion and doing so can cause an unstable application. Currently, the android-targetSdkVersion overrides but doesn't modify compileSdkVersion creating this possibility. Cordova should force compileSdkVersion and targetSdkVersion to be equal.

There is currently no config.xml preference to set the compileSdkVersion, and the lack of this feature should remain. There is a cdvCompileSdkVersion cordova gradle flag, which I think should become deprecated and potentially removed in cordova-android@10 and replaced with a cdvTargetSdkVersion flag to match the config.xml's android-targetSdkVersion preference.

(2) Ensure android/project.properties has the correct target

Currently, Cordova does not modify the target attribute inside /platforms/android/project.properties and it remains set to android-29 which will cause the Android Gradle Plugin (AGP) to download Platform 29.

(3) Ensure android/CordovaLib/project.properties has the correct target

Currently, Cordova does not modify the target attribute inside /platforms/android/CordovaLib/project.properties and it remains set to android-29 which will cause AGP to download Platform 29.

Additionally, a warning should be printed for when the SDK is overridden and uses a value other than the Cordova default target SDK, similar to the min sdk override warning. Using an alternate SDK level is not really a supported feature, so this preference is more-or-less "use at your own risk" (and really should be documented as such).

All 3 actions must be done in order for the AGP to not download API 29.

I cannot give any timeline for when I'll personally be able to do the above, but I'll support any PR that does what is described above.

ICYMI: You can workaround this issue by installing both Platform 29 & 30. You can still build APKs targeted against API 30.

@almothafar
Copy link
Author

You can workaround this issue by installing both Platform 29 & 30. You can still build APKs targeted against API 30.

Actually, is enough to install platform-29, installing platform 30 won't be effective and pointless anyway because of other gradle project properties files, that what I was able to do and build using my docker file even with android-targetSdkVersion set t 30 as it is moved to cdvTargetSdkVersion

@breautek
Copy link
Contributor

breautek commented Apr 6, 2021

installing platform 30 won't be effective and pointless anyway because of other gradle project properties files,

As noted in my notes above but the workaround will still build a target 30 SDK, which will still enable API changes that API 30 will introduce.

If using API 30 platform SDK is a requirement, a temporary full workaround is to modify the following:

/platforms/android/project.properties:

target=android-30

/platforms/android/CordovaLib/project.properties:

target=android-30

Currently the compile SDK version is can be overrided using the cdvCompileSdkVersion flag e.g:

cordova build android --release -- --gradleArg=-PcdvCompileSdkVersion=30

Lastly, of course you still need the android-targetSdkVersion preference in your config.xml file:

<preference name="android-targetSdkVersion" value="30" />

Cordova may overwrite changes to files inside /platforms/ so I'd advise crafting a before_build hook.

@AuTiiTo
Copy link

AuTiiTo commented Apr 6, 2021

hi again guys.
I did all the steps, how can I ensure that the platform is correct?
I searched and found that the command "gradle cdvPrintProps" show this properties:

task cdvPrintProps {
doLast {
println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
println('cdvVersionCode=' + cdvVersionCode)
println('cdvVersionCodeForceAbiDigit=' + cdvVersionCodeForceAbiDigit)
println('cdvMinSdkVersion=' + cdvMinSdkVersion)
println('cdvMaxSdkVersion=' + cdvMaxSdkVersion)
println('cdvTargetSdkVersion=' + cdvTargetSdkVersion)
println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
println('cdvBuildArch=' + cdvBuildArch)
println('computedVersionCode=' + android.defaultConfig.versionCode)
android.productFlavors.each { flavor ->
println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
}
}
}

but it's showed me an error. Did you has another suggestion to see it?
Thanks again for all the effort :)

almothafar added a commit to capellasolutions/ionic-cordova-docker that referenced this issue Apr 7, 2021
@almothafar
Copy link
Author

I was able finally to build it using before_build hook
https://github.com/capellasolutions/ionic-cordova-docker/tree/develop/example-app/scripts

Until this issue is resolved here, maybe in cordova-android 10 or 9.something

@breautek
Copy link
Contributor

@almothafar I believe I have a working fix #1212

Because the PR is based off of the new master which is a development version of cordova-android@10, which contains the SDK 30 by default, you can test it by setting android-targetSdkVersion to 29.

You should set that API 29 and only API 29 is ever downloaded/used with that PR.

@chamaraindrajith
Copy link

chamaraindrajith commented Jul 11, 2021

Tested and it worked.

I changed on config.xml to :

<preference name="android-targetSdkVersion" value="30" />

but it didn’t work so, I remove the platform by using :

cordova platform remove android

then add the latest cordova android version :

cordova platform add android@latest

finally build the project :

cordova build android

It worked! Amazing.

You can check it by going to this file.
\platforms\android\app\build\intermediates\merged_manifests\debug\AndroidManifest.xml

@sksk008
Copy link

sksk008 commented Jul 24, 2021

Cordova released cordova android 10.0.0 on 20/7/2021 so now we can add android api 30 in our project. and its not asking for android 29.

ionic cordova platform remove android
ionic cordova platform add android@10.0.0

almothafar added a commit to capellasolutions/ionic-cordova-docker that referenced this issue Jul 25, 2021
@Pumayk26
Copy link

Tested and it worked.

I changed on config.xml to :

<preference name="android-targetSdkVersion" value="30" />

but it didn’t work so, I remove the platform by using :

cordova platform remove android

then add the latest cordova android version :

cordova platform add android@latest

finally build the project :

cordova build android

It worked! Amazing.

You can check it by going to this file.
\platforms\android\app\build\intermediates\merged_manifests\debug\AndroidManifest.xml

Hi Chamara... Did you able to compile your ionic app with sdk 30..? Am getting this annoying error message again and again...

C:\Users\User_App\platforms\android\app\src\main\java\org\apache\cordova\whitelist\WhitelistPlugin.java:63: error: cannot find symbol allowedRequests = new Whitelist(); ^ symbol: class Whitelist location: class org.apache.cordova.whitelist.WhitelistPlugin Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.

@almothafar
Copy link
Author

Tested and it worked.
I changed on config.xml to :
<preference name="android-targetSdkVersion" value="30" />
but it didn’t work so, I remove the platform by using :
cordova platform remove android
then add the latest cordova android version :
cordova platform add android@latest
finally build the project :
cordova build android
It worked! Amazing.
You can check it by going to this file.
\platforms\android\app\build\intermediates\merged_manifests\debug\AndroidManifest.xml

Hi Chamara... Did you able to compile your ionic app with sdk 30..? Am getting this annoying error message again and again...

C:\Users\User_App\platforms\android\app\src\main\java\org\apache\cordova\whitelist\WhitelistPlugin.java:63: error: cannot find symbol allowedRequests = new Whitelist(); ^ symbol: class Whitelist location: class org.apache.cordova.whitelist.WhitelistPlugin Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.

remove whitelist plugin using cordova plugin rm cordova-plugin-whitelist it is mentioned on that plugin page https://github.com/apache/cordova-plugin-whitelist

@Pumayk26
Copy link

Tested and it worked.
I changed on config.xml to :
<preference name="android-targetSdkVersion" value="30" />
but it didn’t work so, I remove the platform by using :
cordova platform remove android
then add the latest cordova android version :
cordova platform add android@latest
finally build the project :
cordova build android
It worked! Amazing.
You can check it by going to this file.
\platforms\android\app\build\intermediates\merged_manifests\debug\AndroidManifest.xml

Hi Chamara... Did you able to compile your ionic app with sdk 30..? Am getting this annoying error message again and again...
C:\Users\User_App\platforms\android\app\src\main\java\org\apache\cordova\whitelist\WhitelistPlugin.java:63: error: cannot find symbol allowedRequests = new Whitelist(); ^ symbol: class Whitelist location: class org.apache.cordova.whitelist.WhitelistPlugin Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.

remove whitelist plugin using cordova plugin rm cordova-plugin-whitelist it is mentioned on that plugin page https://github.com/apache/cordova-plugin-whitelist

Thanks a lot... Am a noob to this ionic cordova stuff... You made my day dear... :) Thanks again

@breautek
Copy link
Contributor

remove whitelist plugin using cordova plugin rm cordova-plugin-whitelist it is mentioned on that plugin page

We are in an odd state right now because the current cordova CLI will auto-add the whitelist plugin when you create a new cordova project, which is deprecated and incompatible with the latest major version of cordova-android. The next major cordova CLI will solve this problem.

@danicholls
Copy link

If you stick with Cordova 9.1.0 and update config.xml to target Android SDK version 30, you'll need to sign like this: https://stackoverflow.com/a/69473649 -- then all should be well.

@discovermoi
Copy link

I was able finally to build it using before_build hook https://github.com/capellasolutions/ionic-cordova-docker/tree/develop/example-app/scripts

Until this issue is resolved here, maybe in cordova-android 10 or 9.something

Hi, Unable to access the link..

@almothafar
Copy link
Author

I was able finally to build it using before_build hook https://github.com/capellasolutions/ionic-cordova-docker/tree/develop/example-app/scripts
Until this issue is resolved here, maybe in cordova-android 10 or 9.something

Hi, Unable to access the link..

I removed it when this issue was resolved you can see the commit here capellasolutions/ionic-cordova-docker@626ff04

This is the repo, master branch works, develop is not working right now: https://github.com/capellasolutions/ionic-cordova-docker

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants