Category

Applications

I’ve stumbled upon this issue straight after I released my app into the store…

I did a brief search on the Internet what could be causing such behaviour and majority of posts were pointing at some issues with cached data by Google Play Store and/or Google Play Services somehow breaking installation process. They were suggesting cleaning cache of these to solve the problem. Combination of clearing cached data, uninstalling the app, restarting the device and even ejecting the SD card did not help

I didn’t give up though. I was fortunate enough to have a device at home, that I was able to reproduce this with. At least it showing some errors when trying to deploy and debug the app using Visual Studio – which was a good start. Each and every time I tried to deploy the app onto the device I was getting the error

ADB0010: Unexpected install output: Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl1021324914.tmp/base.apk (at Binary XML file line #28): <service> does not have valid android:name]

It didn’t tell me much, so I started googling it. Some of the StackOverflow posts (#1, #2) that I found were pointing me at the problem with package name capital letters. Yep, I did put some capital letters in my app name (i.e. com.progrunning.AirQuality, which ultimately became com.progrunning.airquality). I changed the name of the app in the AndroidManifest.xml but I was still getting that error…I had no choice but to check what’s actually being generated/added by Xamarin.Forms into the AndroidManifest.xml when packaging the app. I went to my bin\Debug folder, to try to unzip the generated *.apk file – *.apk is just fancy *.zip file. Unfortunately, at this stage the AndroidManifest.xml file in the *.apk is nothing but binary data. Which looks something like this when opened with Visual Studio Code:

Fortunately, thanks to this StackOverflow answer, there’s a way of reading what’s in the *.apk package. I located the aapt.exe file, where my android sdk got installed (in my case it was C:\Programming\SDK\Android\android-sdk\build-tools\27.0.3) and ran the command

aapt.exe l -a “C:\Programming\Projects\Own\AirQuality\AirQuality\AirQuality.Android\bin\Debug\com.progrunning.airquality.apk”

The above prints out quite a bit of stuff (you can probably narrow it with some pipes and grep commands – I’m no expert on these though), but we’re interested only in the AndroidManifest.xml file. From the error that I got when trying to deploy and debug the app I knew that something that prevents this from happening is located at the line 28. I finally got my answer:

I used capital letters for my background service (biggggggggggggg mistake!):

Changing it to lowercase fixed the issue

 

EDIT: The problem didn’t seem to be happening for the Android versions 8.0+. It was only affecting 6.0 and 7.0 (maybe more but these two versions are definitely confirmed)

EDIT2: I ended up with my app name having capital letters in it – that was not the problem

System_Update_Requirement_Microsoft.SmartDevice.Connectivity_Version_11

I wanted to install, as it later turns out extremely useful tools for Windows Phone development, Windows Phone Power Tools on my machine and soon after downloading installation file clicking Install I got prompted with information

Unable to install or run the application. The application requires that assembly Microsoft.SmartDevice.Connectivity Version 11.0.0.0 be installed in the Global Assembly Cache (GAC) first. More information on this system update can be found by visiting the site here

and I was not able to install it after all. Obviously, first thing I did was to check the Internet what it has to say about this condition. I was a bit disappointed, because all I found was only this thread which states that you have to make some amendments to the sources and then you’re good to go. I truly wasn’t pleased that I have to go through so much effort to just install one tool and what’s worse I had to have this tool for yesterday, because I had to do some storage testing (creating and removing files and directories). Fortunately the one that posted about changing sources provided a link to already prepared package for the Microsoft.SmartDevice.Connectivity and Windows Phone Power Tools problems.

I actually did not check if those sources work because they are compressed with RAR and I did not have any tool to unpack it…who packs things with RAR ? Eh..anyway, I came to conclusion that if this installer is expecting Version 11 in the GAC I will give it to him ;]

I opened GAC directory

Starting with the .NET Framework 4, the default location for the global assembly cache is %windir%\Microsoft.NET\assembly. In earlier versions of the .NET Framework, the default location is %windir%\assembly.

And looked for a folder named Microsoft.SmartDevice.Connectivity, for me the path was

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.Connectivity\v4.0_10.0.0.0__b03f5f7f11d50a3a

in which you can find another folder with an older or newer version (e.g. v4.0_10.0.0.0__b03f5f7f11d50a3a) of Microsoft.SmartDevice.Conectivity library. If you cannot find it go to my other post, how to install library (dll) in GAC using PowerShell

Microsoft_Smartdevice_Connectivity_dll_directory

The only one thing you have to do is to create a new directory which will point to “expected version”,

Microsoft_Smartdevice_Connectivity_dll_new_fake_directory

then you will copy the same *.dll that already ‘sits’ in the old / newer version folder to the one that you just created.

Microsoft_Smartdevice_Connectivity_dll_in_fake_directory

Now try to install tools again. You fooled installer that you actually have version that it requires ;]

Windows_Phone_Power_Tools_Installing

You can run into same problem but with Microsoft.VisualStudio.DeviceConnectivity.Interop.11.0 library. If you do, apply same “technic” as with Microsoft.SmartDevice.Connectivity library.

Microsoft.VisualStudio.DeviceConnectivity.Interop.11.0

 

Disclaimer: You have to be aware that this is not actually the *.dll that you should have in the folder that you just created, and other applications that rely on this specific version can just break or do not work properly.

I’ve allways had problems with picture resizing. There are so many graphics processing programs, that it makes you feel a little bit confused, and you don’t know which one to use. Even when you find the one that suits you, it turns out to be so complicated, gives you so much possibilities and features that you actually have no idea what to click to achive simple tasks. You have to check in the manual, then watch some video tutorials, read few articles and after couple of hours you are ready to resize your images. Why ? Just why ? I don’t need them, I just want to resize my pictures, that’s it! I don’t want to learn whole colossal application and all its functionalities! Isn’t there a simpler solution ?

Yes there is! I present you Image Resizer for Windows. Great, simple and light tool that let’s you do excatly what you want to do, which is image resizing. The end :). Isn’t it perfect ? I cannot imagine something more simpler. ~One megabyte, one form, one function, one click. Great, just great.

Quick usage tutorial after installation:

  • select pictures (images) that you want to resize
  • click RMB (right mouse button) on selected picutre(s)
  • find ‘Resize pictures‘ in your context menu
  • select preferable size from the form checkboxes
  • click Resize
  • Voila

I think that the most important thing to bear in mind when shrinking (resizing) your images is to watch for Replace the originals option. You can really easily overwrite your originals with their smaller version and never get those big ones back. I strongly advice you to make a copy folder first, e.g.: ‘Small’ or ‘Medium’, copy all images there and then start experimenting on them. Easy.