There appear to be a couple of misconceptions in your way here.
First, you start out by telling us the bit width of Android Studio and Windows. These do not matter, because Android Studio is going to size everything for the target environment, not in relation to the build environment. Android is always cross compiling, so it may help to study how cross compiling works.
Second, array sizes are not normally calculated the way you are doing it. The number in the brackets of an array declaration is the count of objects you want. The size of those objects is what the concept of "sizeof" applied to. You're using char arrays, so the size of each object happens to be one. Instead your array declaration should use the structure or other type you are making an array of, and then the number of them you want determines the number that goes in the brackets. Here is an example:
struct foo { int bar; long baz };
struct foo myarray[10];
This declares a structure "foo" which has an int and a long. Then it declares an array "myarray" of ten of structure "foo".
The reason you want to do this instead of using char arrays and calculating sizeofs it because in the code, the array references work as expected. Otherwise, there is confusion. Using a char array x, then x[2] in the code would select the third byte in the array. Which item in your structure has the third byte as part of it? How would you refer to a long somewhere in the structure? You would have to write a bunch of code to figure out where everything it in the array based on the sizes of the various structure components.
The good news is C already does all of the size calculation for you. Keep the size information in the type part of the array declaration on the left, and the count in the brackets on the right. Then the references not only gives you the reference you want, but compiling the code for different sized platforms gives the correct results. Here is how my array is referenced:
int x = foo[3].bar;
long y = foo[7].baz;
struct z = foo[5];
struct foo w;
w.bar = x;
w.baz = y;
This gave me values from the integer in fourth structure in my array, and the long from the eighth structure. Then I declared a structure of foo and set it to the value of the sixth value of the array. Then I declared yet another simple foo variable to be assigned the values taken from the array in the first two steps.
All of this is done without using sizeof, and without counting bytes within the structure or the array. The compiler can do that for you, and the compiler does it differently for each platform that has different sized types. That latter feature is what makes C code portable between platforms, and is an important concept to understand.
If there are other requirements that are causing you to want to use a char array, perhaps you need to look into "type casting", or the use of a "union".