Closed almothafar closed 2 years ago
you can try
cordova platform add android@version
@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.
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?
@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.
@breautek Ok I got what you are saying, so it seems the value is not ignored:
That's If I installed 29, but If I installed platform 30, I get the error.
I saw the following lines in generated build.gradle file (note that I installed build-tools version 30.0.3, not 29.0.2):
And in the project.properties file:
So is this the reason behind the issue?
Are these issues related? #660 and #686
@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:
Adding to the importance of resolving this issue is very soon Google store won't accept submission of sdk level less than 30.
We'll need to update this version in the near future.
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:
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.
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.
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.
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
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.
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 :)
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
@almothafar I believe I have a working fix https://github.com/apache/cordova-android/pull/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.
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
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
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.
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.xmlHi 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
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.xmlHi 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
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.
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.
I was able finally to build it using
before_build
hook https://github.com/capellasolutions/ionic-cordova-docker/tree/develop/example-app/scriptsUntil this issue is resolved here, maybe in cordova-android 10 or 9.something
Hi, Unable to access the 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.somethingHi, Unable to access the link..
I removed it when this issue was resolved you can see the commit here https://github.com/capellasolutions/ionic-cordova-docker/commit/626ff047863bfc1b1b15ee0cc025f010d98e0ce8
This is the repo, master branch works, develop is not working right now: https://github.com/capellasolutions/ionic-cordova-docker
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 onlyplatform-30
it keeps asking me to install version 29: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