If you're having trouble connecting to an Rockchip Android stick through ADB via a Mac, the below link might help:
MADeveloper
Mobile Application Developer
Wednesday, 26 February 2014
Connect to Android stick[Rockchip RK3188] via OTG on a Mac
If you're having trouble connecting to an Rockchip Android stick through ADB via a Mac, the below link might help:
Saturday, 15 February 2014
[Sony Xperia Tablet Z SGP311] Lost ROOT after Android 4.3 upgrade
My Sony Xperia Tablet Z(Wifi Only - Model SGP311) lost ROOT after upgrading to Android 4.3.
However, the Vroot tool I shared in a previous post no longer works in Android 4.3.
The XDA link below helped me ROOT my tablet again.
I was confused about the prerequisite files required. After going through the entire thread, below is the list of files I used to successfully ROOT my Android 4.3 tablet.
Prerequisite:
1. Your tablet's bootloader should be unlocked. Please follow the official sony instructions here:
http://unlockbootloader.sonymobile.com/
1. boot.img - Link: https://dl.dropboxusercontent.com/u/97918958/boot.zip
2. flashtool(not to be confused with Sony's Emma Flashtool). - Link: http://www.flashtool.net/download.php
3. Android 4.3 ftf. - Link: http://forum.xda-developers.com/showthread.php?t=2589894
Reference:
http://forum.xda-developers.com/showthread.php?t=2590602
Tuesday, 10 December 2013
[Sony Xperia Tablet Z] Make /system/ writable
Next, I needed to make /system writable on the Tablet Z.
The instructions below worked for me:
I used almost the same commands except busybox was not available on my tablet.
Instead, I used ps and kill command to remove the /sbin/ric process.
shell@android:/sdcard/hydrive $ ps | grep ric
root 308 1 1316 616 ffffffff 00000000 S /sbin/ric
u0_a171 981 295 861364 37460 ffffffff 00000000 S com.sonyericsson.textinput.uxp
u0_a157 1009 295 839100 18580 ffffffff 00000000 S com.sonyericsson.devicemonitor
u0_a159 1018 295 837388 15992 ffffffff 00000000 S com.sonyericsson.android.wakeup
u0_a32 1051 295 877932 46728 ffffffff 00000000 S com.sonyericsson.home
system 1472 295 840024 17952 ffffffff 00000000 S com.sonyericsson.usbux
u0_a32 2628 295 838152 21256 ffffffff 00000000 S com.sonyericsson.advancedwidget.clock:lockscreen
u0_a59 7295 295 837996 19768 ffffffff 00000000 S com.sonyericsson.idd.agent
u0_a162 7573 295 839820 19296 ffffffff 00000000 S com.sonyericsson.nfc
u0_a105 7592 295 843036 18636 ffffffff 00000000 S com.sonyericsson.dlna
1|shell@android:/sdcard/hydrive $ su
root@android:/storage/emulated/legacy/hydrive # kill -9 308
NOTE: This is a temporal solution, meaning you will need to do it again after your system reboots.
[Sony Xperia Tablet Z] Rooting Model SGP311
The chinese app at this russian site worked for me.
http://sony-xperia.mobi/programmy/247-poluchenie-root-dlya-xperia-tablet-z-dlya-proshivok-10-3-1-c-0-136-sgp311-312-i-10-3-1-a-0-244-sgp321.html
You need to install the app on your pc, and connect Xperia Tablet Z to your pc using USB.
However, please ensure usb debugging mode is enabled by
1) Tapping on "Settings > About Tablet > Build Number" multiple times to reveal the "Developer Options" in Settings.
2) Ensure " Settings > Developer options > USB debugging " is CHECKED.
Reference:
http://forum.xda-developers.com/showthread.php?t=2428830&page=2
Thursday, 7 February 2013
[Android] iOS-like Pin Entry/Challenge view for Android
One of my user requested for an iOS like Pin Entry View on the android app. I created a repo at github to share this code, https://github.com/chinloong/Android-PinView#readme.
This sample app uses:
- free texture pattern from http://subtlepatterns.com/
- free fonts from http://fontzone.net
Saturday, 26 January 2013
[iOS] RestKit Tutorial Code For Version 0.20
I was trying to follow the RestKit tutorial at
RayWenderlich's Intro to RestKit Tutorial
but encountered various problems due to significant changes in the version 0.20 RestKit.
After searching for solutions at stackoverflow as well as RestKit.org, I finally found the missing pieces and got the example code working with RestKit version 0.20.
Firstly, after adding "#import <RestKit/RestKit.h>" in AppDelegate.m, there was a missing header file error when compiling the app. I found the solution here in stackoverflow.
To resolve this, I need to pull in additional files by running the command below in RestKit directory:
The following is code I used in MasterViewController. You should be able to reuse the other code found in RayWenderlich's tutorial for Location.m, Location.m, Venue.m, and Venue.h.
One key resource that help me was the wiki entry for RKObjectMapping at Restkit.org below:
https://github.com/RestKit/RestKit/wiki/Object-mapping
RayWenderlich's Intro to RestKit Tutorial
but encountered various problems due to significant changes in the version 0.20 RestKit.
After searching for solutions at stackoverflow as well as RestKit.org, I finally found the missing pieces and got the example code working with RestKit version 0.20.
Firstly, after adding "#import <RestKit/RestKit.h>" in AppDelegate.m, there was a missing header file error when compiling the app. I found the solution here in stackoverflow.
To resolve this, I need to pull in additional files by running the command below in RestKit directory:
git submodule update --init --recursive
The following is code I used in MasterViewController. You should be able to reuse the other code found in RayWenderlich's tutorial for Location.m, Location.m, Venue.m, and Venue.h.
One key resource that help me was the wiki entry for RKObjectMapping at Restkit.org below:
https://github.com/RestKit/RestKit/wiki/Object-mapping
//
// MasterViewController.m
// CoffeeShop
//
//
// Copyright (c) 2013 uihelpers. All rights reserved.
//
#import "MasterViewController.h"
#import <RestKit/RestKit.h>
#import "Venue.h"
#import "Location.h"
#define kCLIENTID "REPLACE_WITH_OWN_ID"
#define kCLIENTSECRET "REPLACE_WITH_OWN_SECRET"
@interface MasterViewController () {
NSMutableArray *_objects;
NSArray *cafeArray;
}
@end
@implementation MasterViewController
- (void)awakeFromNib
{
[super awakeFromNib];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
NSURL *baseURL = [NSURL URLWithString:@"https://api.foursquare.com/v2"];
AFHTTPClient * client = [AFHTTPClient clientWithBaseURL:baseURL];
[client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[Venue class]];
[venueMapping addAttributeMappingsFromDictionary:@{
@"name" : @"name"
}];
RKObjectMapping *locationMapping = [RKObjectMapping mappingForClass:[Location class]];
[locationMapping addAttributeMappingsFromDictionary:@{ @"address": @"address", @"city": @"city", @"country": @"country", @"crossStreet": @"crossStreet", @"postalCode": @"postalCode", @"state": @"state", @"distance": @"distance", @"lat": @"lat", @"lng": @"lng"}];
/*[venueMapping mapRelationship:@"location" withMapping:locationMapping];
[objectManager.mappingProvider setMapping:locationMapping forKeyPath:@"location"];*/
[venueMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"location" toKeyPath:@"location" withMapping:locationMapping]];
RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:venueMapping
pathPattern:nil
keyPath:@"response.venues"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:responseDescriptor];
NSString *latLon = @"37.33,-122.03";
NSString *clientID = [NSString stringWithUTF8String:kCLIENTID];
NSString *clientSecret = [NSString stringWithUTF8String:kCLIENTSECRET];
NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys:latLon, @"ll", clientID, @"client_id", clientSecret, @"client_secret", @"coffee", @"query", @"20120602", @"v", nil];
[objectManager getObjectsAtPath:@"https://api.foursquare.com/v2/venues/search"
parameters:queryParams
success:^(RKObjectRequestOperation * operaton, RKMappingResult *mappingResult)
{
//NSLog(@"success: mappings: %@", mappingResult);
NSArray *result = [mappingResult array];
cafeArray = [mappingResult array];
for (Venue *item in result) {
NSLog(@"name=%@",item.name);
NSLog(@"name=%@",item.location.distance);
}
[self.tableView reloadData];
}
failure:^(RKObjectRequestOperation * operaton, NSError * error)
{
NSLog (@"failure: operation: %@ \n\nerror: %@", operaton, error);
}];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (void)insertNewObject:(id)sender
{
if (!_objects) {
_objects = [[NSMutableArray alloc] init];
}
[_objects insertObject:[NSDate date] atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return cafeArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
/*NSDate *object = [_objects objectAtIndex:indexPath.row];
cell.textLabel.text = [object description];*/
Venue *venueObject = [cafeArray objectAtIndex: indexPath.row];
cell.textLabel.text = [venueObject.name length] > 24 ? [venueObject.name substringToIndex:24] : venueObject.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.0fm", [venueObject.location.distance floatValue]];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[_objects removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/
/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
@end
Monday, 21 January 2013
[iOS] Create static library
As mentioned in my earlier blog, 2 of my apps needed a pin challenge view. In order to share the code, it was better to create it as a library.
I managed to find a good base code in "PinView" at guicocoa.
However, I needed to enhance it to include a custom button on lower left corner as well as make the "delete(x)" key same color as other keys. I'll leave those code details for another posting.
Step 1. Download pinview at git
Step 2. Below is the directory structure of "PinView" sample app, where the PinView code will be under "pinview" directory. Make a backup of this directory and save it at another location.
Step 3. open the SampleApp project by clicking on the SampleApp.xcodeproj.
Step 4. In order to create a clean directory structure, we need to first delete the pinview directory. Ensure "Move to Trash" option is selected in the confirmation dialog.
Step 9. Copy all the code you backed up in Step 2. and paste them into pinview directory.
Next, in xcode, add all the files under pinview directory.
Step 10. Next, add the new library by selecting "SampleApp" under Targets, > Build Phase > Link Binary With Libraries > "+". Next, select the libpinview.a and click "Add".
Now, you are ready to run the SampleApp.
I managed to find a good base code in "PinView" at guicocoa.
However, I needed to enhance it to include a custom button on lower left corner as well as make the "delete(x)" key same color as other keys. I'll leave those code details for another posting.
Step 1. Download pinview at git
Step 2. Below is the directory structure of "PinView" sample app, where the PinView code will be under "pinview" directory. Make a backup of this directory and save it at another location.
Step 3. open the SampleApp project by clicking on the SampleApp.xcodeproj.
Step 4. In order to create a clean directory structure, we need to first delete the pinview directory. Ensure "Move to Trash" option is selected in the confirmation dialog.
Ensure the "Move to Trash" option is selected.
Step 5. Create a new "Cocoa Touch Static Library" target, by selecting "File > New > Target".
Step 6. I maintained the "pinview" name.
Steps 7. Xcode generated some code for us, which we don't need. So, delete them and choose the "Move to Trash" option.
Steps 8. Notice the pinview directory now only contains the pinview-Prefix.pch.
Step 9. Copy all the code you backed up in Step 2. and paste them into pinview directory.
Next, in xcode, add all the files under pinview directory.
Step 10. Next, add the new library by selecting "SampleApp" under Targets, > Build Phase > Link Binary With Libraries > "+". Next, select the libpinview.a and click "Add".
Now, you are ready to run the SampleApp.
Subscribe to:
Posts (Atom)