JSON (JavaScript Object Notation) described: http://www.json.org
JSON data structures
Examples - JSON object: { "name":"Sarah", "age":23, "student":true } - JSON array: [ "Starbucks", "McDonalds", "Chipotle" ] JSON validators Possible JSON alternatives This course was my first security-related studies and subsequent certification. eLearnSecurity is largely unknown in the US, but it was one of the few learning platforms offering a hands-on experience, so for under $500 for both the course training materials and exam voucher, it was a relatively good deal.
Initial impressions:
Final verdict: Would recommend and take it again if the choice presented itself. It's a great start and is able to do something tech training can rarely do: spark excitement and curiosity. However, go into the course with some reservations and slightly lowered expectations. After taking a hiatus from Android development in Android Studio, I returned to my projects to find the following gradle error: Error:failed to find target with hash string 'Google Inc.:Google APIs:25'. The hash string may vary with each project based on the API it was set to in the compileSdkVersion in your gradle file. Per this StackOverflow post on the matter, the compileSdkVersion also resembled the format of the original poster's (see image below) and shortening to the simple version number (25 at the time of this writing) seemed to fix the issue. So my Android Studio recently updated to build tools version 23.0.2 while working on some Material design updates for my apps. Testing primarily on versions 22+, I hadn't noticed any issues when attempting to compile. However, once testing down to 14 (lowest version currently supported by the apps), I was encountering the following error:
Error inflating class android.support.v7.widget.Toolbar Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v19/abc_ic_ab_back_material.xml After reading this article, AppCompat v23.2 — Age of the vectors, the reasoning behind the error as well as the respective fix can be found. The flag to be enabled in gradle is listed for versions 2.0+ and 1.5 or below. Mistakenly thinking that I was on version 2.0+, the first flag did not work and resulted in the vectorDrawables being non-resolvable. After some research, it was discovered that I was most likely on the 1.5 version or below. However, that flag triggered errors too, particularly for the generatedDensities property as described in the Stack Overflow problem. A final check of the top-level gradle file finally revealed the problem -- it was still referencing 1.2.3! Build system versions are listed at this link - New Build Systems - Android Tools Project Site. Setting the dependencies in the top-level build.gradle, recompile, and voila. Encountered an issue with the back button rendering my Fragment container meant to hold two fragments for a FragmentStatePagerAdapter blank when returning.
In the onCreateView() of the container Fragment where the adapter is being set, rather than previously calling getSupportFragmentManager() in this app that will be targeting down to SDK 14, changing this to getChildFragmentManager() fixed the issue. Now, when returning from a back button press, everything loads fine. Was unaware of Resources.getDrawable(int) deprecation after SDK 22 until updating and getting the dreaded cross-line. For projects targeting lower APIs, ContextCompact.getDrawable(Context, int) of the support library was most appropriate and for other uses, the alternatives found in the Google+ post. More info regarding this:
-- Resources -- ContextCompat -- Android getResources().getDrawable() deprecated API 22 When generating a signed APK for an app using ProGuard with Play Services, I encountered this Issue 3001 preventing the APK from being generated due to errors being thrown up. The two possible workarounds seem to be: A. Add statements to proguard-project.txt -keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.** or B. Add missing library back in: android { useLibrary 'org.apache.http.legacy' } Chose option A to avoid enlarging the APK size. Seems to be an issue with SDK 23 and 24 apparently, as it was updated yesterday. Awaiting fix. Experimenting with the new support library for a future app update, I was able to convert a basic button layout to a more user-friendly navigation drawer. It will be a nice change as this app was created nearly three years ago and targeting older Android versions. The conversion from activities to fragments was also surprisingly easily. Converting the old button-based main layout to Lollipop's new Material design CardView allowed preservation of the old, more traditional navigation in conjunction with the new nav drawer. Would've liked more customization and will look into that, but suspect that it is intentionally this way to maintain the uniformity of Material design.
* Edit - Seems to be fixed now with version 24 update. Still awaiting the fix for the odd bug with PagerTabStrip's titles not showing on first load until after swiping in version 23. Apparently, reverting back to the previous version may fix the issue, but seems a little troublesome to do so. androidcentral - The 'Stagefright' exploit: What you need to know
techradar - Google has lost control of Android, Stagefright and HTC highlight a really big security problem PCWorld - Android devices will soon run Windows software thanks to CrossOver and Wine PCWorld - Android malware hammers phones with unwanted ads, Kemoge malware lifehacker - This Graphic Explains How Much Time and Money It Takes to Develop a Mobile App
As Android Studio has been declared the official Android IDE for some time now, it's time to transition over, albeit somewhat late. Not really wanting to uproot the development environment while in the middle of larger app updates, there was some delay.
In the meanwhile, dealing with the ever-outdated feeling of Eclipse ADT and the slow, glitchy behavior, I'm definitely welcoming a smoother development experience. No more twiddling the thumbs waiting for emulators to launch or excessive, consecutive Project-->Clean(s) to eliminate random non-legit errors. Haven't done a lot so far as still in the process of importing Eclipse projects over, but creating virtual devices using the AVD Manager has been amazingly fast and easy. Overall, the environment just feels so fluid and polished -- definitely a nice change from the clunkiness of Eclipse ADT. Maybe there will be more time spent being productive versus wait times and random bugs. |
AuthorExploring Android and mobile web design, security, and development. Archives
March 2021
Categories |