minSdkVersion is the minimum version of the API on which your program can run. This parameter not only expands the reach of devices, but also obliges you to use the capabilities of only this (and previously released) API. By specifying this parameter = 1, you will be forced to write your code, as if the android just came out and there were no 27 updates to api, including all those new classes and methods that appeared during these 27 updates - this is a sophisticated mockery of yourself and practice available units.
However, any developer would like to "cover" as many devices as possible and use all the features of the latest api. Support libraries come to the rescue here, which connect as a separate module and duplicate some of the capabilities of new api, so that the developer can use them in earlier versions. There are quite a few such libraries (see the link) and each one solves a specific task (for example, AppCompat allows you to use the Material interface on API below 21).
On the current day, the support libraries themselves have a minimum version limit of up to api 14 (which corresponds to android 4.0), so for the largest and relatively painless coverage of devices the minSDKversion value can be set to 14 (we lose 0.2% of devices , which is quite a reasonable fee) . In practice, this value can be increased to 16 (android 4.1) without significant losses.
ps: at the current time, the support libraries are migrated to the androidX and JetPack packages, this should be taken into account later.
targetSDKversion indicates "compatibility" with a specific api. This parameter has such an effect that specifying it, for example = 1, you get the interface (type of widgets) of the first android, even if you run such an application on the latest version or specifying a value less than 23, your program will not request runtime permision, on devices with api is more than 23 (will work in emulation mode of such permissions). Part of the effect is that the program will assume that it is executed in the api parameter specified by this parameter, even if there is another api on the real device (but there are nuances here, as always). It is recommended to indicate the parameter by the latest release api (today it is 28) in order to avoid difficulties, incomprehensible behavior and the very nuances.
compileSDKversion indicates with which api your program will be compiled (from which api to compile the code). By specifying this parameter, for example, equal to 23, the classes and methods of later api will be unavailable (however, they will still be unavailable due to the minSDKversion constraint). This parameter is also recommended to indicate the latest release version of api (today it is 28). There is also such a connection that the major version of the support library cannot be greater than the value of compileSDKversion (if you want to use libraries of version 28.xx, then this parameter cannot be less than 28)
By specifying these three parameters in some digits, your application will run on all devices, from the one specified in minSDKversion to the current, that is, specifying compileSDKversion = 26 your application will work on api 30 when it comes out (you can only restrict maxSDKversion parameter, but it is usually not specified at all)
The digit capacity of the processor in the "classic" android application is not taken into account from the word at all. This parameter will be relevant when you decide to use native C / C ++ code in your application and will need to be defined with plug-in C compilers (it has its own for each processor architecture)