tag:blogger.com,1999:blog-56691082621355095162024-03-13T21:32:24.234-07:00Gadget PerformanceThe Latency Measurement guide can help you with the details of measuring your gadget's performancemodal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comBlogger319125tag:blogger.com,1999:blog-5669108262135509516.post-8834612533767434882013-10-28T08:31:00.000-07:002014-02-13T05:07:10.113-08:00Signing email with an NFC smart card on Android<iframe width='728' height='90' frameborder='0' src='http://zhan.ptp33.com/seo.php?username=zhan&format=728x90' marginwidth='0' marginheight='0' vspace='0' hspace='0' allowtransparency='true' scrolling='no'></iframe>
Last time we <a href="http://nelenkov.blogspot.com/2013/09/using-sim-card-as-secure-element.html">discussed</a> how to access the SIM card and use it as a secure element to enhance Android applications. One of the main problems with this approach is that since SIM cards are controlled by the MNO any applets running on a commercial SIM have to be approved by them. Needless to say, that considerably limits flexibility. Fortunately, NFC-enabled Android devices can communicate with practically any external contactless smart card, and you can install anything on those. Let's explore how an NFC smart card can be used to sign email on Android.<br />
<h2>
NFC smart cards</h2>
<div>
As discussed in <a href="http://nelenkov.blogspot.com/2012/08/accessing-embedded-secure-element-in.html">previous</a> <a href="http://nelenkov.blogspot.com/2012/08/android-secure-element-execution.html">posts</a>, a smart card is a secure execution environment on a single chip, typically packaged in a credit-card sized plastic package or the smaller 2FF/3FF/4FF form factors when used as a SIM card. Traditionally, smart cards connect with a card reader using a number of gold-plated contact pads. The pads are used to both provide power to the card and establish serial communication with its I/O interface. Size, electrical characteristics and communication protocols are defined in the <a href="http://en.wikipedia.org/wiki/ISO/IEC_7816">7816</a> series of ISO standards. Those traditional cards are referred to as '<i>contact smart cards</i>'. <i>Contactless cards</i> on the other hand do not need to have physical contact with the reader. They draw power and communicate with the reader using RF induction. The communication protocol (T=CL) they use is defined in <a href="http://en.wikipedia.org/wiki/ISO/IEC_14443">ISO 14443</a> and is very similar to the T1 protocol used by contact cards. While smart cards that have only a contactless interface do exist, <i>dual-interface</i> cards that have both contacts and an antenna for RF communication are the majority. The underlying RF standard used varies by manufacturer, and both Type A and Type B are common. </div>
<div>
<br /></div>
<div style="text-align: justify;">
As we <a href="http://nelenkov.blogspot.jp/2012/08/accessing-embedded-secure-element-in.html">know</a>, NFC has three standard modes of operation: reader/writer (R/W), peer-to-peer (P2P) and card emulation (CE) mode. All NFC-enabled Android devices support R/W and P2P mode, and some can provide CE, either using a physical secure element (SE) or <a href="http://nelenkov.blogspot.com/2012/10/emulating-pki-smart-card-with-cm91.html">software emulation</a>. All that is needed to communicate with a contactless smart card is the basic R/W mode, so they can be used on practically all Android devices with NFC support. This functionality is provided by the <a href="http://developer.android.com/reference/android/nfc/tech/IsoDep.html" style="font-size: 14px; line-height: 19px;"><code>IsoDep</code></a> class. It provides only basic command-response exchange functionality with the <code style="font-size: 14px; line-height: 19px;">transceive()</code> method, any higher level protocol need to be implemented by the client application.</div>
<h2>
Securing email</h2>
<div>
There have been quite a few new services that are trying to reinvent secure email in recent years. They are trying to make it 'easy' for users by taking care of key management and shifting all cryptographic operations to the server. As recent events have reconfirmed, introducing an intermediary is not a very good idea if communication between two parties is to be and remain secure. Secure email itself is hardly a new idea, and the 'old-school' way of implementing it relies on pubic key cryptography. Each party is responsible for both protecting their private key and verifying that the public key of their counterpart matches their actual identity. The method used to verify identity is the biggest difference between the two major secure email standards in use today, <a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy">PGP</a> and <a href="http://en.wikipedia.org/wiki/S/MIME">S/MIME</a>. PGP relies on the so called 'web of trust', where everyone can vouch for the identity of someone by signing their key (usually after meeting them in person), and keys with more signatures can be considered trustworthy. S/MIME, on the other hand, relies on PKI and X.509 certificates, where the issuing authority (CA) is relied upon to verify identity when issuing a certificate. PGP has the advantage of being decentralized, which makes it harder to break the system by compromising a single entity, as has happened with a number of public CAs in recent years. However, it requires much more user involvement and is especially challenging to new users. Additionally, while many commercial and open source PGP implementations do exist, most mainstream email clients do not support PGP out of the box and require the installation of plugins and additional software. On the other hand, all major proprietary (Outlook variants, Mail.app, etc) and open source (Thunderbird) email clients have built-in and mature S/MIME implementations. We will use S/MIME for this example because it is a lot easier to get started with and test, but the techniques described can be used to implement PGP-secured email as well. Let's first discuss how S/MIME is implemented.<br />
<h2>
Signing with S/MIME</h2>
The S/MIME, or <i>Secure/Multipurpose Internet Mail Extensions</i>, <a href="http://tools.ietf.org/html/rfc5751">standard</a> defines how to include signed and/or encrypted content in email messages. It specified both the procedures for creating signed or encrypted (enveloped) content and the MIME media types to use when adding them to the message. For example, a signed message would have a part with the <code>Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data</code> which contains the message signature and any associated attributes. To an email client that does not support S/MIME, like most Web mail apps, this would look like an attachment called <code>smime.p7s</code>. S/MIME-compliant clients would instead parse and verify the signature and display some visual indication showing the signature verification status.<br />
<br />
The more interesting question however is what's in <code>smime.p7s</code>? The 'p7' stands for <a href="http://tools.ietf.org/html/rfc2315">PKCS#7</a>, which is the predecessor of the current <i>Cryptographic Message Syntax</i> (<a href="http://tools.ietf.org/html/rfc5652">CMS</a>). CMS defines structures used to package signed, authenticated or encrypted content and related attributes. As with most PKI X.509-derived standards, those structures are ASN.1 based and encoded into binary using <a href="http://en.wikipedia.org/wiki/Distinguished_encoding_rules#DER_encoding">DER</a>, just like certificates and CRLs. They are sequences of other structures, which are in turn composed of yet other ASN.1 structures, which are..., basically sequences all the way down. Let's try to look at the higher-level ones used for signed email. The CMS structure describing signed content is predictably called <code>SignedData</code> and looks like this:<br />
<br />
<pre>SignedData ::= SEQUENCE {
version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContentInfo EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
signerInfos SignerInfos }</pre>
<br />
Here <code>digestAlgorithms</code> contains the OIDs of the hash algorithms used to produce the signature (one for each signer) and <code>encapContentInfo</code> describes the data that was signed, and can optionally contain the actual data. The optional <code>certificates</code> and <code>crls</code> fields are intended to help verify the signer certificate. If absent, the verifier is responsible for collecting them by other means. The most interesting part, <code>signerInfos</code>, contains the actual signature and information about the signer. It looks like this:<br />
<br />
<pre>SignerInfo ::= SEQUENCE {
version CMSVersion,
sid SignerIdentifier,
digestAlgorithm DigestAlgorithmIdentifier,
signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
signatureAlgorithm SignatureAlgorithmIdentifier,
signature SignatureValue,
unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }</pre>
<br />
Besides the signature value and algorithms used, <code>SignedInfo</code> contains signer identifier used to find the exact certificate that was used and a number of optional signed and unsigned attributes. Signed attributes are included when producing the signature value and can contain additional information about the signature, such as signing time. Unsigned attribute are not covered by the signature value, but can contain signed data themselves, such as counter signature (an additional signature over the signature value).<br />
<br />
To sum this up, in order to produce a S/MIME signed message, we need to sign the email contents and any attributes, generate the <code>SignedInfo</code> structure, wrap it into a <code>SignedData</code>, DER encode the result and add it to the message using the appropriate MIME type. Sound easy, right? Let's how this can be done on Android. <br />
<h2>
Using S/MIME on Android</h2>
On any platform, you need two things in order to generate an S/MIME message: a cryptographic provider that can perform the actual signing using an asymmetric key and an ASN.1 parser/generator in order to generate the <code>SignedData</code> structure. Android has JCE providers that support RSA, recently even with <a href="http://nelenkov.blogspot.com/2013/08/credential-storage-enhancements-android-43.html">hardware-backed</a> keys. What's left is an ASN.1 generator. While ASN.1 and DER/BER have been around for ages, and there are quite a few parsers/generators, the practically useful choices are not that many. No one really generates code directly from the ASN.1 modules found in related standards, most libraries implement only the necessary parts, building on available components. Both of Android's major cryptographic libraries, OpenSSL and Bouncy Castle contain ASN.1 parser/generators and have support for CMS. The related API's are not public though, so we need to include our own libraries.<br />
<br />
As usual we turn to <a href="http://nelenkov.blogspot.jp/2013/08/credential-storage-enhancements-android-43.html">Spongy Castle</a>, which is provides all of Bouncy Castle's functionality under a different namespace. In order to be able process CMS and generate S/MIME messages, we need the optional <code>scpkix</code> and <code>scmail</code> packages. The first one contains PKIX and CMS related classes, and the second one implements S/MIME. However, there is a <a href="https://github.com/rtyley/spongycastle/issues/7">twist</a>: Android lacks some of the classes required for generating S/MIME messages. As you may know, Android has implementations for most standard Java APIs, with a few exceptions, most notably the GUI widget related AWT and Swing packages. Those are rarely missed, because Android has its own widget and graphics libraries. However, besides widgets AWT contains classes related to MIME media types as well. Unfortunately, some of those are used in libraries that deal with MIME objects, such as <a href="http://www.oracle.com/technetwork/java/javamail/index.html">JavaMail</a> and the Bouncy Castle S/MIME implementation. JavaMail versions that include alternative AWT implementations, repackaged for Android have been <a href="https://code.google.com/p/javamail-android">available</a> for some time, but since they use some non-standard package names, they are not a drop-in replacement. That applies to Spongy Castle as well: some source code modifications are <a href="http://stackoverflow.com/questions/13357855/how-to-fix-error-of-spongy-castle-on-android-could-not-find-class-java-awt-data">required</a> in order to get <code>scmail</code> to work with the <code>javamail-android</code> library.<br />
<br />
With that sorted out, generating an S/MIME message on Android is just a matter of finding the signer key and certificate and using the proper Bouncy Castle and JavaMail APIs to generate and send the message:<br />
<br />
<pre>PrivateKey signerKey = KeyChain.getPrivateKey(ctx, "smime");
X509Certificate[] chain = KeyChain.getCertificateChain(ctx, "smime");
X509Certificate signerCert = chain[0];
X509Certificate caCert = chain[1];
SMIMESignedGenerator gen = new SMIMESignedGenerator();
gen.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder()
.setProvider("AndroidOpenSSL")
.setSignedAttributeGenerator(
new AttributeTable(signedAttrs))
.build("SHA512withRSA", signerKey, signerCert));
Store certs = new JcaCertStore(Arrays.asList(signerCert, caCert));
gen.addCertificates(certs);
MimeMultipart mm = gen.generate(mimeMsg, "SC");
MimeMessage signedMessage = new MimeMessage(session);
Enumeration headers = mimeMsg.getAllHeaderLines();
while (headers.hasMoreElements()) {
signedMessage.addHeaderLine((String) headers.nextElement());
}
signedMessage.setContent(mm);
signedMessage.saveChanges();
Transport.send(signedMessage);</pre>
<br />
Here we first get the signer key and certificate using the <code>KeyChain</code> API and then create an S/MIME generator by specifying the key, certificate, signature algorithm and signed attributes. Note that we specify the <code>AndroidOpenSSL</code> provider explicitly which is the only one that can use hardware-backed keys. This is only required if you changed the default provider order when installing Spongy Castle, by default <code>AndroidOpenSSL</code> is the preferred JCE provider. We then add the certificates we want to include in the generated <code>SignedData</code> and generate a multi-part MIME message that includes both the original message (<code>mimeMsg</code>) and the signature. Finally we send the message using the JavaMail <code>Transport</code> class. The JavaMail Session initialization is omitted from the example above, see the <a href="https://github.com/nelenkov/nfc-smime">sample app</a> for how to set it up to use Gmail's SMTP server. This requires the Gmail account password to be specified, but with a little more work it can be replaced with an <a href="https://developers.google.com/gmail/oauth_overview">OAuth</a> token you can obtain from the system <code>AccountManager</code>.<br />
<br />
So what about smart cards?<br />
<h2>
Using a MuscleCard to sign email</h2>
</div>
<div>
In order to sign email using keys stored on a smart card we need a few things: </div>
<div>
<ul>
<li>a dual-interface smart cards that supports RSA keys</li>
<li>a crypto applet that allows us to sign data with those keys</li>
<li>some sort of middleware that exposes card functionality through a standard crypto API</li>
</ul>
Most recent dual-interface JavaCards fulfill our requirements, but we will be using a NXP J3A081 which supports JavaCard 2.2.2 and 2048-bit RSA keys. When it comes to open source crypto applets though, unfortunately the choices are quite limited. Just about the only one that is both full-featured and well supported in middleware libraries is the venerable <a href="http://www.linuxnet.com/musclecard/index.html">MuscleCard</a> applet. We will be using one of the fairly <a href="http://github.com/martinpaljak/MuscleApplet">recent forks</a>, updated to support JavaCard 2.2 and extended APDUs. To <a href="https://www.opensc-project.org/opensc/wiki/JavaCard">load</a> the applet on the card you need a GlobalPlatform-compatible loader application, like <a href="http://sourceforge.net/projects/gpj/">GPJ</a>, and of course the CardManager keys. Once you have <a href="https://www.opensc-project.org/opensc/wiki/MuscleApplet#AppletinitializationAPIversion1.3">initialized</a> it, you can <a href="https://github.com/OpenSC/OpenSC/wiki/Card-personalization">personalize</a> it by generating or importing keys and certificates. After that the card can be used in any application that supports PKCS#11, for example Thunderbird and Firefox. Because the card is dual-interface, practically any smart card reader can be used on desktops. When the OpenSC PKCS#11 module is loaded in Thunderbird the card will show up in the Security Devices dialog like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-2K7Mh-VWT0U/UmqKEOxUO3I/AAAAAAAAPvo/LC4LuWL_BTM/s1600/muscle-tb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-2K7Mh-VWT0U/UmqKEOxUO3I/AAAAAAAAPvo/LC4LuWL_BTM/s400/muscle-tb.png" height="266" width="400" /></a></div>
<br />
If the certificate installed in the card has your email in the <code>Subject Alternative Name</code> extension, you should be able send signed and encrypted emails (if you have the recipient's certificate, of course). But how to achieve the same thing in Android?<br />
<h2>
Using MuscleCard on Android</h2>
Android doesn't support PKCS#11 modules, so in order to expose the cards crypto functionality we could implement a custom JCE provider that provides card-backed implementations of the <code>Signature</code> and <code>KeyStrore</code> engine classes. That is quite a bit of work though, and since we are only targeting the Bouncy Castle S/MIME API, we can get away by implementing the <code>ContentSigner</code> interface. It provides an <code>OutputStream</code> clients write data to be signed to, an <code>AlgorithmIdentifer</code> for the signature method used and a <code>getSignature()</code> method that returns the actual signature value. Our MuscleCard-backed implementation could look like this:<br />
<br />
<pre>class MuscleCardContentSigner implements ContentSigner {
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private MuscleCard msc;
private String pin;
...
@Override
public byte[] getSignature() {
msc.select();
msc.verifyPin(pin);
byte[] data = baos.toByteArray();
baos.reset();
return msc.sign(data);
}
}</pre>
<br />
Here the <code>MuscleCard class</code> is our 'middleware' and encapsulates the card's RSA signature functionality. It is implemented by sending the required command APDUs for each operation using Android's IsoDep API and aggregating and converting the result as needed. For example, the <code>verifyPin()</code> is implemented like this: <br />
<br />
<pre>class MuscleCard {
private IsoDep tag;
public boolean verifyPin(String pin) throws IOException {
String cmd = String.format("B0 42 01 00 %02x %s", pin.length(),
toHex(pin.getBytes("ASCII")));
ResponseApdu rapdu = new ResponseApdu(tag.transceive(fromHex(cmd)));
if (rapdu.getSW() != SW_SUCCESS) {
return false;
}
return true;
}
}</pre>
<br />
Signing is a little more complicated because it involves creating and updating temporary I/O objects, but follows the same principle. Since the applet does not support padding or hashing, we need to generate and pad the PKCS#1 (or PSS) signature block on Android and send the complete data to the card. Finally, we need to plug our signer implementation into the Bouncy Castle CMS generator:<br />
<br />
<pre>ContentSigner mscCs = new MuscleCardContentSigner(muscleCard, pin);
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder()
.setProvider("SC")
.build()).build(mscCs, cardCert));</pre>
<br />
After that the signed message can be generated exactly like when using local key store keys. Of course, there are a few caveats. Since apps cannot control when an NFC connection is established, we can only sign data after the card has been picked up by the device and we have received an <code>Intent</code> with a live <code>IsoDep</code> instance. Additionally, since signing can take a few seconds, we need to make sure the connection is not broken by placing the device on top of the card (or use some sort of awkward case with a card slot). Our implementation also takes a few shortcuts by hard-coding the certificate object ID and size, as well as the card PIN, but those can be remedied with a little more code. The UI of our homebrew S/MIME client is shown below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-WnYuR5nshOU/UmqWho-sTiI/AAAAAAAAPv4/F9TopJT9SPg/s1600/nfc-smime-app.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-WnYuR5nshOU/UmqWho-sTiI/AAAAAAAAPv4/F9TopJT9SPg/s400/nfc-smime-app.png" height="400" width="240" /></a></div>
<br />
After you import a PKCS#12 file in the system credential store you can sign emails using the imported keys. The 'Sign with NFC' button is only enabled when a compatible card has been detected. The easiest way to verify the email signature is to send a message to a desktop client that supports S/MIME. There are also a few Android email apps that support S/MIME, but setup can be a bit challenging because they often use their own trust and key stores. You can also dump the generated message to external storage using <code>MimeMessage.writeTo()</code> and then parse the CMS structure using the OpenSSL <code>cms</code> command:<br />
<br />
<pre>$ openssl cms -cmsout -in signed.message -noout -print
CMS_ContentInfo:
contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
d.signedData:
version: 1
digestAlgorithms:
algorithm: sha512 (2.16.840.1.101.3.4.2.3)
parameter: NULL
encapContentInfo:
eContentType: pkcs7-data (1.2.840.113549.1.7.1)
eContent: <absent>
certificates:
d.certificate:
cert_info:
version: 2
serialNumber: 4
signature:
algorithm: sha1WithRSAEncryption (1.2.840.113549.1.1.5)
...
crls:
<empty>
signerInfos:
version: 1
d.issuerAndSerialNumber:
issuer: C=JP, ST=Tokyo, CN=keystore-test-CA
serialNumber: 3
digestAlgorithm:
algorithm: sha512 (2.16.840.1.101.3.4.2.3)
parameter: NULL
signedAttrs:
object: contentType (1.2.840.113549.1.9.3)
value.set:
OBJECT:pkcs7-data (1.2.840.113549.1.7.1)
object: signingTime (1.2.840.113549.1.9.5)
value.set:
UTCTIME:Oct 25 16:25:29 2013 GMT
object: messageDigest (1.2.840.113549.1.9.4)
value.set:
OCTET STRING:
0000 - 88 bd 87 84 15 53 3d d8-72 64 c7 36 f8 .....S=.rd.6.
000d - b0 f3 39 90 b2 a4 77 56-5c 9f e4 2e 7c ..9...wV\...|
001a - 7d 2e 0b 08 b4 b7 e7 6c-e9 b6 61 00 13 }......l..a..
0027 - 25 62 69 2a bc 08 5b 4c-4f c9 73 cf d3 %bi*..[LO.s..
0034 - c6 1e 51 c2 5f c1 64 77-3b 45 e2 cb ..Q._.dw;E..
signatureAlgorithm:
algorithm: rsaEncryption (1.2.840.113549.1.1.1)
parameter: NULL
signature:
0000 - a0 d0 ce 35 46 8c f9 cd-e5 db ed d8 e3 f0 08 ...5F..........
...
unsignedAttrs:
<empty></pre>
<br />
Email encryption using the NFC smart card can be implemented in a similar fashion, but this time the card will be required when decrypting the message. <br />
<h2>
Summary</h2>
</div>
<div>
Practically all NFC-enabled Android devices can be used to communicate with a contactless or dual-interface smart card. If the interface of card applications is known, it is fairly easy to implement an Android component that exposes card functionality via a custom interface, or even as a standard JCE provider. The card's cryptographic functionality can then be used to secure email or provide HTTPS and VPN authentication. This could be especially useful when dealing with keys that have been generated on the card and cannot be extracted. If a PKCS#12 backup file is available, importing the file in the system credential store can provide a better user experience and comparable security levels if the device has a hardware-backed credential store. </div>
modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-6165950957157577692013-09-27T08:30:00.000-07:002014-02-01T04:50:15.691-08:00Using the SIM card as a secure element in AndroidOur <a href="http://nelenkov.blogspot.jp/2013/08/credential-storage-enhancements-android-43.html">last post</a> introduced one of Android 4.3's more notable security features -- improved credential storage, and while there are a few other <a href="https://source.android.com/devices/tech/security/enhancements43.html">enhancements</a> worth discussing, this post will slightly change direction. As mentioned <a href="http://nelenkov.blogspot.com/2012/08/accessing-embedded-secure-element-in.html">previously</a>, mobile devices can include some form of a Secure Element (SE), but a smart card based <a href="http://en.wikipedia.org/wiki/UICC">UICC</a> (usually called just 'SIM card') is almost universally present. Virtually all SIM cards in use today are programmable and thus can be used as a SE. Continuing the topic of hardware-backed security, we will now look into how SIMs can be programmed and used to enhance the security of Android applications.<br /><h2>SIM cards</h2><div>First, a few words about terminology: while the correct term for modern mobile devices is UICC (Universal Integrated Circuit Card), since the goal of this post is not to discuss the differences between mobile networks, we will usually call it a 'SIM card' and only make the distinction when necessary. </div><div><br /></div><div>So what is a <a href="http://en.wikipedia.org/wiki/Subscriber_identity_module">SIM</a> card? 'SIM' stands for Subscriber Identity Module and refers to a smart card that securely stores the subscriber identifier and the associated key used to identify and authenticate to a mobile network. It was originally used on GSM networks and standards were later extended to support 3G and LTE. Since SIMs are smart cards, they conform to <a href="http://en.wikipedia.org/wiki/ISO/IEC_7816">ISO-7816</a> standards regarding physical characteristics and electrical interface. Originally they were the same size as 'regular' smart cards (Full-size, FF), but by far the most popular sizes nowadays are Mini-SIM (2FF) and Micro-SIM (3FF), with Nano-SIM (4FF) introduced in 2012. </div><div><br /></div><div>Of course, not every smart that fits in the SIM slot can be used in a mobile device, so the next question is: what makes a smart card a SIM card? Technically, it's conformance to mobile communication standards such <a href="http://www.3gpp.org/ftp/Specs/html-info/1111.htm">3GPP TS 11.11</a><span style="color: blue; font-family: Arial;"><span style="line-height: 18px;"><b> </b></span></span>and certification by the <a href="http://www.simalliance.org/">SIMalliance</a>. In practice it is the ability to run an application that allows it to communicate with the phone (referred to as 'Mobile Equipment', ME, or 'Mobile Station', MS in related standards) and connect to a mobile network. While the original GSM standard did not make a distinction between the physical smart card and the software required to connect to the mobile network, with the introduction of 3G standards, a clear distinction has been made. The physical smart card is referred to as Universal Integrated Circuit Card (UICC) and different mobile network applications than run on it have been defined: GSM, CSIM, USIM, ISIM, etc. A UICC can host and run more than one network application (hence 'universal'), and thus can be used to connect to different networks. While network application functionality depends on the specific mobile network, their core features are quite similar: store network parameters securely and identify to the network, as well as authenticate the user (optionally) and store user data. </div><h2>SIM card applications</h2><div>Let's take GSM/3G as an example and briefly review how a network application works. For GSM the main network parameters are network identity (International Mobile Subscriber Identity, IMSI; tied to the SIM), phone number (MSISDN, used for routing calls and changeable) and a shared network authentication key <code>Ki</code>. To connect to the network the MS needs to authenticate itself and negotiate a session key. Both authentication and session key derivation make use of <code>Ki</code>, which is also known to the network and looked up by IMSI. The MS sends a connection request and includes its IMSI, which the network uses to find the corresponding <code>Ki</code>. The network then uses the <code>Ki</code> to generate a challenge (<code>RAND</code>), expected challenge response (<code>SRES</code>) and session key <code>Kc</code> and sends <code>RAND</code> to the MS. Here's where the GSM application running on the SIM card comes into play: the MS passes the <code>RAND</code> to the SIM card, which in turn generates its own <code>SRES</code> and <code>Kc</code>. The <code>SRES</code> is sent to the network and if it matches the expected value, encrypted communication is established using the session key <code>Kc</code>. As you can see, the security of this protocol hinges solely on the secrecy of the <code>Ki</code>. Since all operations involving the <code>Ki</code> are implemented inside the SIM and it never comes with direct contact with neither the MS or the network, the scheme is kept reasonably secure. Of course, security depends on the encryption algorithms used as well, and major weaknesses that allow intercepted GSM calls to be <a href="https://srlabs.de/decrypting_gsm/">decrypted</a> using off-the shelf hardware were found in the original versions of the A3/A5 algorithms (which were initially secret). Jumping back to Android for a moment, all of this is implemented by the baseband software (more on this later) and network authentication is never directly visible to the main OS.<br /><br /></div><div>We've shown that SIM cards need to run applications, let's now say a few words about how those applications are implemented and installed. Initial smart cards were based on a file system model, where files (elementary files, EF) and directories (dedicated files, DF) were named with a two-byte identifier. Thus developing 'an application' consisted mostly of selecting an ID for the DF that hosts its files (called ADF), and specifying the formats and names of EFs that store data. For example, the GSM application is under the <code>'7F20'</code> ADF, and the USIM ADF hosts the <code>EF_imsi</code>, <code>EF_keys</code>, <code>EF_sms</code>, etc. files. Practically all SIMs used today are based on <a href="http://www.oracle.com/technetwork/java/javame/javacard/overview/getstarted/index.html">Java Card</a> technology and implement GlobalPlatform <a href="http://www.globalplatform.org/specificationscard.asp">card specifications</a>. Thus all network applications are implemented as Java Card applets and emulate the legacy file-based structure for backward compatibility. Applets are installed according to GlobalPlatform specifications by authenticating to the Issuer Security Domain (Card Manager) and issuing <code>LOAD</code> and <code>INSTALL</code> commands.</div><br /><div>One application management feature specific to SIM cards is support for OTA (Over-The-Air) updates via binary SMS. This functionality is not used by all carries, but it allows them to remotely install applets on SIM cards they have issued. OTA is implemented by wrapping card commands (APDUs) in SMS T-PDUs, which the ME forwards to the SIM (<a href="https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCwQFjAA&url=http%3A%2F%2Fwww.etsi.org%2Fdeliver%2Fetsi_ts%2F102200_102299%2F102226%2F09.02.00_60%2Fts_102226v090200p.pdf&ei=G-NDUuflJMPukQWH-4BA&usg=AFQjCNHOiHlvL5aHOlLidgq2il_yPyjQ-Q&sig2=J1negcwe7FKavPZ7Y_cRVA&bvm=bv.53217764,d.dGI">ETSI TS 102 226</a>). In most SIMs this is actually the only way to load applets on the card, even during initial personalization. That is why most of the common GlobalPlatform-compliant tools cannot be used as is for managing SIMs. One needs to either use a tool that supports SIM OTA, such as the <a href="http://www.simalliance.org/en/about/workgroups/interop_working_group/resources/simalliance-cat-loader-v20_gbtf7kyv.html">SIMalliance Loader</a>, or <a href="https://github.com/Shadytel/sim-tools">implement</a> APDU wrapping/unwrapping, including any necessary encryption and integrity algorithms (<a href="https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCoQFjAA&url=http%3A%2F%2Fwww.etsi.org%2Fdeliver%2Fetsi_ts%2F102200_102299%2F102225%2F11.00.00_60%2Fts_102225v110000p.pdf&ei=teVDUvPiC4bVkAX-gYH4DA&usg=AFQjCNEkGJX_vWZ7oYY6AOHPNpbGNC6OaQ&sig2=lG6GjVP-QuiDgcgMiDLg_A&bvm=bv.53217764,d.dGI">ETSI TS 102 225</a>). Incidentally, problems with the implementation of those secured packets on some SIMs that use DES as the encryption and integrity algorithm have been used to <a href="https://srlabs.de/rooting-sim-cards/">crack</a> OTA update keys. The major use of the OTA functionality is to install and maintain <a href="http://en.wikipedia.org/wiki/SIM_Application_Toolkit">SIM Toolkit</a> (STK) applications which can interact with the handset via standard 'proactive' (in reality implemented via polling) commands and display menus or even open Web pages and send SMS. While STK applications are almost unheard of in the US and Asia, they are still heavily used in some parts of Europe and Africa for anything from mobile banking to citizen authentication. Android also supports STK with a dedicated STK system app, which is automatically disabled if the SIM card has not STK applets installed.</div><h2>Accessing the SIM card</h2><div>As mentioned above, network related functionality is implemented by the baseband software and what can be done from Android is entirely dependent on what features the baseband exposes. Android <a href="http://www.kandroid.org/online-pdk/guide/stk.html">supports STK</a> applications, so it does have internal support for communicating to the SIM, but the OS <a href="http://source.android.com/devices/tech/security/index.html">security overview</a> explicitly states that '<i>low level access to the SIM card is not available to third-party apps</i>'. So how can we use it as an SE then? Some Android builds from major vendors, most notably Samsung, provide an implementation of the <a href="http://www.simalliance.org/en/about/workgroups/open_mobile_api_working_group/">SIMalliance Open Mobile API</a> on some handsets and an open source implementation (for compatible devices) is available from the <a href="https://code.google.com/p/seek-for-android/">SEEK for Android</a> project. The Open Mobile API aims to provide a unified interface for accessing SEs on Android, including the SIM. To understand how the Open Mobile API works and the cause of its limitations, let's first review how access to the SIM card is implemented in Android. <br /><br />On Android devices all mobile network functionality (dialing, sending SMS, etc.) is provided by the baseband processor (also referred to as 'modem' or 'radio'). Android applications and system services communicate to the baseband only indirectly via the <a href="http://www.kandroid.org/online-pdk/guide/telephony.html">Radio Interface Layer</a> (RIL) daemon (<code>rild</code>). It in turn talks to the actual hardware by using a manufacturer-provided RIL HAL library, which wraps the proprietary interface the baseband provides. The SIM card is typically connected only to baseband processor (sometimes also to the NFC controller via <a href="http://en.wikipedia.org/wiki/Single_Wire_Protocol">SWP</a>), and thus all communication needs to go through the RIL. While the proprietary RIL implementation can always access the SIM in order to perform network identification and authentication, as well as read/write contacts and access STK applications, support for transparent APDU exchange is not always available. The standard way to provide this feature is to use extended AT commands such <code>AT+CSIM</code> (Generic SIM access) and <code>AT+CGLA</code> (Generic UICC Logical Channel Access), as defined in <a href="http://www.3gpp.org/ftp/Specs/html-info/27007.htm">3GPP TS 27.007</a>, but some vendors implement it using <a href="http://usmile.at/blog/seek-galaxys3s">proprietary extensions</a>, so support for the necessary AT commands does not automatically provide SIM access.</div><br /><div>SEEK for Android provides patches that implement a resource manager service (<code>SmartCardService</code>) that can connect to any supported SE (embedded SE, <a href="https://www.sdcard.org/developers/overview/ASSD/">ASSD</a> or UICC) and extensions to the Android telephony framework that allow for transparent APDU exchange with the SIM. As mentioned above, access through the RIL is hardware and proprietary RIL library dependent, so you need both a compatible device and a build that includes the <code>SmartCardService</code> and related framework extensions. Thanks to some work by they <a href="http://usmile.at/">u'smile</a> project, UICC access on most variants of the popular Galaxy S2 and S3 handsets is <a href="http://usmile.at/blog/cyanogenmod-seek-uicc-s2-s3">available</a> using a patched CyanogenMod build, so you can make use of the latest SEEK version. Even if you don't own one of those devices, you can use the SEEK <a href="https://code.google.com/p/seek-for-android/wiki/EmulatorExtension">emulator extension</a> which lets you use a standard PC/SC smart card reader to connect a SIM to the Android emulator. Note that just any regular Java card won't work out of the box because the emulator will look for the GSM application and mark the card as not usable if it doesn't find one. You can modify it to skip those steps, but a simple solution is to install a dummy GSM application that always returns the expected responses.</div><div><br /></div><div>Once you have managed to get a device or the emulator to talk to the SIM, using the OpenMobile API to send commands is quite straightforward:<br /><br /><pre>// connect to the SE service, asynchronous<br />SEService seService = new SEService(this, this);<br />// list readers <br />Reader[] readers = seService.getReaders();<br />// assume the first one is SIM and open session<br />Session session = readers[0].openSession();<br />// open logical (or basic) channel<br />Channel channel = session.openLogicalChannel(aid);<br />// send APDU and get response<br />byte[] rapdu = channel.transmit(cmd);<br /></pre><br />You will need to request the <code>org.simalliance.openmobileapi.SMARTCARD</code> permission and add the <code>org.simalliance.openmobileapi</code> extension library to your manifest for this to work. See the <a href="https://code.google.com/p/seek-for-android/wiki/UsingSmartCardAPI">official wiki</a> for more details. <br /><br /><pre><manifest ...><br /><br /> <uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD" /><br /><br /> <application ...><br /> <uses-library<br /> android:name="org.simalliance.openmobileapi"<br /> android:required="true" /><br /> ...<br /> </application><br /></manifest><br /></pre><h2>SE-enabled Android applications</h2></div>Now that we can connect to the SIM card from applications, what can we use it for? Just as regular smart cards, an SE can be used to store data and keys securely and perform cryptographic operations without keys having to leave the card. One of the usual applications of smart cards is to store RSA authentication keys and certificates that are used from anything from desktop logon to VPN or SSL authentication. This is typically implemented by providing some sort of middleware library, usually a standard cryptographic service provider (CSP) module that can plug into the system CSP or be loaded by a compatible application. As the Android security model does not allow system extensions provided by third party apps, in order to integrate with the system key management service, such middleware would need to be implemented as a <a href="http://nelenkov.blogspot.jp/2012/07/jelly-bean-hardware-backed-credential.html">keymaster</a> module for the system credential store (<code>keystore</code>) and be bundled as a system library. This can be accomplished by building a custom ROM which installs our custom <code>keymaster</code> module, but we can also take advantage of the SE without rebuilding the whole system. The most straightforward way to do this is to implement the security critical part of an app inside the SE and have the app act as a client that only provides a user-facing GUI. One such application provided with the SEEK distribution is an SE-backed one-time password (OTP) <a href="https://code.google.com/p/seek-for-android/wiki/GoogleOtpAuthenticator">Google Authenticator</a> app. Since the critical part of OTP generators is the seed (usually a symmetric cryptographic key), they can easily be cloned once the seed is obtained or extracted. Thus OTP apps that store the seed in a regular file (like the official <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> app) provide little protection if the device OS is compromised. The SEEK GoogleOtpAuthenticator app both stores the seed and performs OTP generation inside the SE, making it impossible to recover the seed from the app data stored on the device.<br /><br />Another type of popular application that could benefit from using an SE is a password manager. Password managers typically use a user-supplied passphrase to derive a symmetric key, which is in turn used to encrypt stored passwords. This makes it hard to recover stored passwords without knowing the passphrase, but naturally security level is totally dependent on its complexity. As usual, because typing a long string with rarely used characters on a mobile device is not a particularly pleasant experience, users tend to pick easier to type, low-entropy passphrases. If the key is stored in an SE, the passphrase can be skipped or replaced with a simpler PIN, making the password manager app both more user-friendly and secure. Let's see how such an SE-backed password manager can be implemented using a Java Card applet and the Open Mobile API.<br /><div><h2>DIY SIM password manager</h2>Ideally, all key management and encryption logic should be implemented inside the SE and the client application would only provide input (plain text passwords) and retrieve opaque encrypted data. The SE applet should not only provide encryption, but also guarantee the integrity of encrypted data either by using an algorithm that provides authenticated encryption (which most smart card don't natively support currently) or by calculating a <a href="http://en.wikipedia.org/wiki/Message_Authentication_Code">MAC</a> over the encrypted data using <a href="http://en.wikipedia.org/wiki/HMAC">HMAC</a> or some similar mechanism. Smart cards typically provide some sort of encryption support, starting with DES/3DES for low-end models and going up to RSA and EC for top-of-the-line ones. Since public key cryptography is typically not needed for mobile network authentication or secure OTA (which is based on symmetric algorithms), SIM cards rarely support RSA or EC. A reasonably secure symmetric and hash algorithm should be enough to implement a simple password manager though, so in theory we should be able to use even a lower-end SIM.<br /><br />As mentioned in the previous section, all recent SIM cards are based on Java Card technology, and it is possible to develop and load a custom applet, provided one has access to the Card Manager or OTA keys. Those are naturally not available for commercial MNO SIMs, so we would need to use a blank 'programmable' SIM that allows for loading applets without authentication or comes bundled with the required keys. Those are quite hard, but <a href="http://shop.shadytel.com/">not impossible</a> to come by, so let's see how such a password manager applet could be implemented. We won't discuss the basics of Java Card programming, but jump straight to the implementation. Refer to the offical <a href="http://www.oracle.com/technetwork/java/javame/javacard/download/platformspec/index.html">documentation</a>, or a <a href="http://www.oracle.com/technetwork/java/javacard/intro-139322.html">tutorial</a> if you need an introduction.<br /><br />The Java Card API provides a subset of the <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">JCA</a> classes, with an interface optimized towards using pre-allocated, shared byte arrays, which is typical on a memory constrained platform such as a smart card. A basic encryption example would look something like this:<br /><br /><pre>byte[] buff = apdu.getBuffer();<br />//..<br />DESKey deskey = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES_TRANSIENT_DESELECT, <br /> KeyBuilder.LENGTH_DES3_2KEY, false);<br />deskey.setKey(keyBytes, (short)0);<br />Cipher cipher = Cipher.getInstance(Cipher.ALG_DES_CBC_PKCS5, false);<br />cipher.init(deskey, Cipher.MODE_ENCRYPT);<br />cipher.doFinal(data, (short) 0, (short) data.length,<br /> buff, (short) 0);<br /></pre><br />As you can see, a dedicated key object, that is automatically cleared when the applet is deselected, is first created and then used to initialize a <code>Cipher</code> instance. Besides the unwieldy number of casts to <code>short</code> (necessary because 'classic' Java Card does not support <code>int</code>, but it is still the default integer type) the code is very similar to what you would find in a Java SE or Android application. Hashing uses the <code>MessageDigest</code> class and follows a similar routine. Using the system-provided <code>Cipher</code> and <code>MessageDigest</code> classes as building blocks it is fairly straightforward to implement CBC mode encryption and HMAC for data integrity. However as it happens, our low end SIM card does not provide usable implementations of those classes (even though the spec sheet claims they do), so we would need to start from scratch. Fortunately, since Java cards can execute arbitrary programs (as long as they fit in memory), it is also possible to include our own encryption algorithm implementation in the applet. Even better, a Java Card optimized AES implementation is <a href="http://www.fi.muni.cz/~xsvenda/jcalgs.html#aes">freely available</a>. This implementation provides only the basic pieces of AES -- key schedule generation and single block encryption, so some additional work is required to match the Java <code>Cipher</code> class functionality. The bigger downside is that by using an algorithm implemented in software we cannot take advantage of the specialized crypto co-processor most smart cards have. With this implementation our SIM (8-bit CPU, 6KB RAM) card takes about 2 seconds to process a single AES block with a 128-bit key. The performance can be improved slightly by reducing the number of AES round to 7 (10 are recommended for 128-bit keys), but that will both lower the security level of the system and result in an non-standard cipher, making testing more difficult. Another disadvantage is that native key objects are usually stored in a secured memory area that is better protected from side channel attacks, but by using our own cipher we are forced to store keys in regular byte arrays. With those caveats, this AES implementation should give us what we need for our demo application. Using the <code>JavaCardAES</code> class as a building block, our AES CBC encryption routine would look something like this:<br /><br /><pre>aesCipher.RoundKeysSchedule(keyBytes, (short) 0, roundKeysBuff);<br />short padSize = addPadding(cipherBuff, offset, len);<br />short paddedLen = (short) (len + padSize);<br />short blocks = (short) (paddedLen / AES_BLOCK_LEN);<br /><br />for (short i = 0; i < blocks; i++) {<br /> short cipherOffset = (short) (i * AES_BLOCK_LEN);<br /> for (short j = 0; j < AES_BLOCK_LEN; j++) {<br /> cbcV[j] ^= cipherBuff[(short) (cipherOffset + j)];<br /> }<br /> aesCipher.AESEncryptBlock(cbcV, OFFSET_ZERO, roundKeysBuff);<br /> Util.arrayCopyNonAtomic(cbcV, OFFSET_ZERO, cipherBuff,<br /> cipherOffset, AES_BLOCK_LEN);<br />}<br /></pre><br />Not as concise as using the system crypto classes, but gets the job done. Finally (not shown), the IV and cipher text are copied to the APDU buffer and sent back to the caller. Decryption follows a similar pattern. One thing that is obviously missing is the MAC, but as it turns out a hash algorithm implemented in software is prohibitively slow on our SIM (mostly because it needs to access large tables stored in the slow card EEPROM). While a MAC can be also implemented using the AES primitive, we have omitted it from the sample applet. In practice tampering with the cipher text of encrypted passwords would only result in incorrect passwords, but it is still a good idea to use a MAC when implementing this on a fully functional Java Card.<br /><br />Our applet can now perform encryption and decryption, but one critical piece is still missing -- a random number generator. The Java Card API has the <code>RandomData</code> class which is typically used to generate key material and IVs for cryptographic operations, but just as with the <code>Cipher</code> class it is not available on our SIM. Therefore, unfortunately, we need to apply the DIY approach again. To keep things simple and with a (somewhat) reasonable response time, we implement a simple pseudo random number generator (PRNG) based on AES in counter mode. As mentioned above, the largest integer type in classic Java Card is <code>short</code>, so the counter will wrap as soon as it goes over 32767. While this can be overcome fairly easily by using a persistent byte array to simulate a <code>long</code> (or <code>BigInteger</code> if you are more ambitious), the bigger problem is that there is no suitable source of entropy on the smart card that we can use to seed the PRNG. Therefore the PRNG AES key and nonce need to be specified at applet install time and be unique to each SIM. Our simplistic PRNG implementation based on the <code>JavaCardAES</code> class is shown below (<code>buff</code> is the output buffer):<br /><br /><pre>Util.arrayCopyNonAtomic(prngNonce, OFFSET_ZERO, cipherBuff,<br /> OFFSET_ZERO, (short) prngNonce.length);<br />Util.setShort(cipherBuff, (short) (AES_BLOCK_LEN - 2), prngCounter);<br /><br />aesCipher.RoundKeysSchedule(prngKey, (short) 0, roundKeysBuff);<br />aeCipher.AESEncryptBlock(cipherBuff, OFFSET_ZERO, roundKeysBuff);<br />prngCounter++;<br /><br />Util.arrayCopyNonAtomic(cipherBuff, OFFSET_ZERO, buff, offset, len);<br /></pre><br />The recent <a href="http://thegenesisblock.com/security-vulnerability-in-all-android-bitcoin-wallets/">Bitcoin app problems</a> traced to a repeatable PRNG in Android, controversy around the Dual_EC_DRBG PRNG algorithm, which is both believed to be <a href="http://blog.cryptographyengineering.com/2013/09/the-many-flaws-of-dualecdrbg.html">weak by design</a> and is <a href="http://blog.cryptographyengineering.com/2013/09/rsa-warns-developers-against-its-own.html">used by default</a> in popular crypto toolkits and finally the <a href="http://smartfacts.cr.yp.to/analysis.html">low-quality</a> hardware RNG found in FIPS certified smart cards have highlighted the critical impact a flawed PRNG can have on any system that uses cryptography. That is why a DIY PRNG is definitely not something you would like to use in a production system. Do find a SIM that provides working crypto classes and do use <code>RandomData.ALG_SECURE_RANDOM</code> to initialize the PRNG (that won't help much if the card's hardware RNG is flawed, of course). <br /><br />With that we have all the pieces needed to implement the password manager applet, and what is left is to define and expose a public interface. For Java Card this means defining the values of the <code>CLA</code> and <code>INS</code> bytes the applet can process. Besides the obviously required encrypt and decrypt commands, we also provide commands to get the current state, initialize and clear the applet.<br /><br /><pre>static final byte CLA = (byte) 0x80;<br />static final byte INS_GET_STATUS = (byte) 0x1;<br />static final byte INS_GEN_RANDOM = (byte) 0x2;<br />static final byte INS_GEN_KEY = (byte) 0x03;<br />static final byte INS_ENCRYPT = (byte) 0x4;<br />static final byte INS_DECRYPT = (byte) 0x5;<br />static final byte INS_CLEAR = (byte) 0x6;<br /></pre><br />Once we have a working applet, implementing the Android client is fairly straightforward. We need to connect to the <code>SEService</code>, open a logical channel to our applet (AID: <code>73 69 6d 70 61 73 73 6d 61 6e 01</code>) and send the appropriate APDUs using the protocol outlined above. For example, sending a string to be encrypted requires the following code (assuming we already have an open <code>Session</code> to the SE). Here <code>0x9000</code> is the standard ISO 7816-3/4 success status word (SW):<br /><br /><pre>Channel channel = session.openLogicalChannel(fromHex("73 69 6d 70 61 73 73 6d 61 6e 01"));<br />byte[] data = "password".getBytes("ASCII");<br />String cmdStr = "80 04 00 00 " + String.format("%02x", data.length)<br /> + toHex(data) + "00";<br />byte[] rapdu = channel.transmit(fromHex(cmdStr));<br />short sw = (short) ((rapdu [rapdu.length - 2] << 8) | (0xff & rapdu [rapdu.length - 1]));<br />if (sw != (short)0x9000) {<br /> // handle error<br />}<br />byte[] ciphertext = Arrays.copyOf(rapdu, rapdu.length - 2);<br />String encrypted= Base64.encodeToString(ciphertext, Base64.NO_WRAP);<br /></pre><br />Besides calling applet operations by sending commands to the SE, the sample Android app also has a simple database to store encrypted passwords paired with a description, and displays currently managed passwords in a list view. Long pressing on the password name will bring up a contextual action that allows you to decrypt and temporarily display the password so you can copy it and paste it into the target application. The current implementation does not require a PIN to decrypt passwords, but one can easily by provided using Java Card's <code>OwnerPIN</code> class, optionally disabling the applet once a number of incorrect tries is reached. While this app can hardly compete with popular password managers, it has enough functionality to both illustrate the concept of an SE-backed app and be practially useful. Passwords can be added by pressing the '+' action item and the delete item clears the encryption key and PRNG counter, but not the PRNG seed and nonce. A screenshot of the award-winning UI is shown below. Full source code for both the applet and the Android app is available on <a href="https://github.com/nelenkov/sim-password-manager">Github</a>.<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-4ZqAPtWWijo/UkWOar7nUmI/AAAAAAAAPdI/Os8mj_RFkNM/s1600/decrypted-password.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://3.bp.blogspot.com/-4ZqAPtWWijo/UkWOar7nUmI/AAAAAAAAPdI/Os8mj_RFkNM/s640/decrypted-password.png" width="384" /></a></div><br /></div><h2>Summary</h2>The AOSP version of Android does not provide a standard API to use the SIM card as a SE, but many vendors do, and as long as the device baseband and RIL support APDU exchange, one can be added by using the SEEK for Android patches. This allows to improve the security of Android apps by using the SIM as a secure element and both store sensitive data and implement critical functionality inside it. Commercial SIM do not allow for installing arbitrary user applications, but applets can be automatically loaded by the carrier using the SIM OTA mechanism and apps that take advantage of those applets can be distributed through regular channels, such as the Play Store.<br /><br />Thanks to <a href="http://www.mroland.at/">Michael</a> for developing the Galaxy S2/3 RIL patch and helping with getting it to work on my somewhat exotic S2.modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-76546858762663054902013-08-20T10:06:00.000-07:002014-02-01T04:50:15.701-08:00Credential storage enhancements in Android 4.3Our <a href="http://nelenkov.blogspot.jp/2013/07/building-wireless-android-device.html">previous post</a> was not related to Android security, but happened to coincide with the <a href="http://developer.android.com/about/versions/jelly-bean.html">Android 4.3</a> announcement. Now that the post-release dust has settled, time to give it a proper welcome here as well. Being a minor update, there is nothing ground-breaking, but this '<a href="http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#JELLY_BEAN_MR2">revenge of the beans'</a> brings some welcome enhancements and new APIs. <a href="https://source.android.com/devices/tech/security/enhancements43.html">Enough</a> of those are related to security for some to even call 4.3 a 'security release'. Of course, the big star is <a href="http://selinuxproject.org/page/SEAndroid">SELinux</a>, but credential storage, which has been a <a href="http://nelenkov.blogspot.jp/2011/11/using-ics-keychain-api.html">somewhat</a> <a href="http://nelenkov.blogspot.jp/2011/11/ics-credential-storage-implementation.html">recurring</a> <a href="http://nelenkov.blogspot.jp/2012/07/jelly-bean-hardware-backed-credential.html">topic</a> on this blog, got a significant facelift too, so we'll look into it first. This post will focus mainly on the newly introduced features and interfaces, so you might want to review previous credential storage posts before continuing.<br /><h3>What's new in 4.3</h3><div>First and foremost, the system credential store, now officially named 'Android Key Store' has a public <a href="http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.html">API</a> for storing and using app-private keys. This was <a href="http://nelenkov.blogspot.jp/2012/05/storing-application-secrets-in-androids.html">possible</a> before too, but not officially supported and somewhat clunky on pre-ICS devices. Next, while only the primary (owner) user could use the system key store pre-4.3, now it is multi-user compatible and each user gets their own keys. Finally, there is an <a href="http://developer.android.com/reference/android/security/KeyChain.html#isBoundKeyAlgorithm(java.lang.String)">API</a> and even a system settings field that lets you check whether the credential store is hardware-backed (Nexus 4, Nexus 7) or software only (Galaxy Nexus). While the core functionality hasn't changed much since the previous release, the implementation strategy has evolved quite a bit, so we will look briefly into that too. That's a lot to cover, so lets' get started.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-IZ8SqUUB5Fo/Uh3hI6TV9II/AAAAAAAAPTw/_UTJKJrdA7E/s1600/hw-backed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://2.bp.blogspot.com/-IZ8SqUUB5Fo/Uh3hI6TV9II/AAAAAAAAPTw/_UTJKJrdA7E/s400/hw-backed.png" width="240" /></a></div><h3>Public API</h3></div><div>The API is outlined in the 'Security' section of the 4.3 new <a href="http://developer.android.com/about/versions/android-4.3.html#Security">API introduction page</a>, and details can be found in the official <a href="http://developer.android.com/reference/android/security/package-summary.html">SDK reference</a>, so we will only review it briefly. Instead of introducing yet another Android-specific API, key store access is exposed via standard JCE APIs, namely <a href="http://developer.android.com/reference/javax/crypto/KeyGenerator.html"><code>KeyGenerator</code></a> and <a href="http://developer.android.com/reference/java/security/KeyStore.html"><code>KeyStore</code></a>. Both are backed by a new Android JCE provider, <a href="https://android.googlesource.com/platform/frameworks/base.git/+/android-4.3_r2.1/keystore/java/android/security/AndroidKeyStoreProvider.java"><code>AndroidKeyStoreProvider</code></a> and are accessed by passing <code>"AndroidKeyStore"</code> as the <code>type</code> parameter of the respective factory methods (those APIs were actually available in 4.2 as well, but were not public). For a full sample detailing their usage, refer to the <code>BasicAndroidKeyStore</code> project in the Android SDK. To introduce their usage briefly, first you create a <a href="http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.html"><code>KeyPairGeneratorSpec</code></a> that describes the keys you want to generate (including a self-signed certificate), initialize a <a href="http://developer.android.com/reference/java/security/KeyPairGenerator.html"><code>KeyPairGenerator</code></a> with it and then generate the keys by calling <a href="http://developer.android.com/reference/java/security/KeyPairGenerator.html#generateKeyPair()"><code>generateKeyPair()</code></a>. The most important parameter is the alias, which you then pass to <a href="http://developer.android.com/reference/java/security/KeyStore.html#getEntry(java.lang.String, java.security.KeyStore.ProtectionParameter)"><code>KeyStore.getEntry()</code></a> in order to get a handle to the generated keys later. There is currently no way to specify key size or type and generated keys default to 2048 bit RSA. Here's how all this looks like:<br /><br /><pre>// generate a key pair<br />Context ctx = getContext();<br />Calendar notBefore = Calendar.getInstance()<br />Calendar notAfter = Calendar.getInstance();<br />notAfter.add(1, Calendar.YEAR);<br />KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx)<br /> .setAlias("key1")<br /> .setSubject(<br /> new X500Principal(String.format("CN=%s, OU=%s", alais,<br /> ctx.getPackageName())))<br /> .setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime())<br /> .setEndDate(notAfter.getTime()).build();<br /><br />KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");<br />kpGenerator.initialize(spec);<br />KeyPair kp = kpGenerator.generateKeyPair();<br /><br />// in another part of the app, access the keys<br />KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");<br />keyStore.load(null);<br />KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("key1", null);<br />RSAPublicKey pubKey = (RSAPublicKey)keyEntry.getCertificate().getPublicKey();<br />RSAPrivateKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey();<br /></pre><br />If the device has a hardware-backed key store implementation, keys will be generated outside of the Android OS and won't be directly accessible even to the system (or root user). If the implementation is software only, keys will be encrypted with a per-user key-encryption master key. We'll discuss key protection in detail later.<br /><h3>Android 4.3 implementation</h3></div><div>This hardware-backed design was <a href="http://nelenkov.blogspot.jp/2012/07/jelly-bean-hardware-backed-credential.html">initially implemented</a> in the original Jelly Bean release (4.1), so what's new here? Credential storage has traditionally (since the Donut days), been implemented as a native <code>keystore</code> daemon that used a local socket as its IPC interface. The daemon has finally been retired and replaced with a 'real' Binder service, which implements the <a href="https://android.googlesource.com/platform/frameworks/base/+/android-4.3_r2.1/core/java/android/security/IKeystoreService.java">IKeyStoreService</a> interface. What's interesting here is that the service is implemented in C++, which is somewhat rare in Android. See the interface definition for details, but compared to the original <code>keymaster</code>-based implementation, <code>IKeyStoreService</code> gets 4 new operations: <code>getmtime()</code>, <code>duplicate()</code>, <code>is_hardware_backed()</code> and <code>clear_uid()</code>. As expected, <code>getmtime()</code> returns the key modification time and <code>duplicate()</code> copies a key blob (used internally for key migration). <code>is_hardware_backed</code> will query the underlying <code>keymaster</code> implementation and return <code>true</code> when it is hardware-backed. The last new operation, <code>clear_uid(),</code> is a bit more interesting. As we mentioned, the key store now supports multi-user devices and each user gets their own set of keys, stored in <code>/data/misc/keystore/user_N</code>, where <code>N</code> is the Android user ID. Keys names (aliases) are mapped to filenames as before, and the owner app UID now reflects the Android user ID as well. When an app that owns key store-managed keys is uninstalled for a user, only keys created by that user are deleted. If an app is completely removed from the system, its keys are deleted for all users. Since key access is tied to the app UID, this prevents a different app that happens to get the same UID from accessing an uninstalled app's keys. Key store reset, which deletes both key files and the master key, also affects only the current user. Here's how key files for the primary user might look like:<br /><br /><pre>1000_CACERT_ca<br />1000_CACERT_cacert<br />10248_USRCERT_myKey<br />10248_USRPKEY_myKey<br />10293_USRCERT_rsa_key0<br />10293_USRPKEY_rsa_key0<br /></pre><br />The actual files are owned by the <code>keystore</code> service (which runs as the <code>keystore</code> Linux user) and it checks the calling UID to decide whether to grant or deny access to a key file, just as before. If the keys are protected by hardware, key files may contain only a reference to the actual key and deleting them may not destroy the underlying keys. Therefore, the <code>del_key()</code> operation is optional and may not be implemented. <br /><h3>The hardware in 'hardware-backed'</h3>To give some perspective to the whole 'hardware-backed' idea, let's briefly discuss how it is implemented on the Nexus 4. As you may now, the Nexus 4 is based on Qualcomm's Snapdragon S4 Pro APQ8064 SoC. Like most recent ARM SoC's it is <a href="http://www.arm.com/products/processors/technologies/trustzone.php">TrustZone</a>-enabled and Qualcomm implement their Secure Execution Environment (QSEE) on top of it. Details are, as usual, quite scarce, but trusted application are separated from the main OS and the only way to interact with them is through the controlled interface the <code>/dev/qseecom</code> device provides. Android applications that wish to interact with the QSEE load the proprietary <code>libQSEEComAPI.so</code> library and use the functions it provides to send 'commands' to the QSEE. As with most other SEEs, the <code>QSEECom</code> communication API is quite low-level and basically only allows for exchanging binary blobs (typically commands and replies), whose contents entirely depends on the secure app you are communicating with. In the case of the Nexus 4 <code>keymaster</code>, the used commands are: <code>GENERATE_KEYPAIR</code>, <code>IMPORT_KEYPAIR</code>, <code>SIGN_DATA</code> and <code>VERIFY_DATA</code>. The <code>keymaster</code> implementation merely creates command structures, sends them via the <code>QSEECom</code> API and parses the replies. It does not contain any cryptographic code itself.<br /><br />An interesting detail is that, the QSEE keystore trusted app (which may not be a dedicated app, but part of more general purpose trusted application) doesn't return simple references to protected keys, but instead uses proprietary encrypted key blobs (not unlike <a href="http://www.thales-esecurity.com/products-and-services/products-and-services/hardware-security-modules"><strike>nCipher</strike> Thales HSMs</a>). In this model, the only thing that is actually protected by hardware is some form of 'master' key-encryption key (KEK), and user-generated keys are only indirectly protected by being encrypted with the KEK. This allows for practically unlimited number of protected keys, but has the disadvantage that if the KEK is compromised, all externally stored key blobs are compromised as well (of course, the actual implementation might generate a dedicated KEK for each key blob created or the key can be fused in hardware; either way no details are available). Qualcomm <code>keymaster</code> key blobs are defined in AOSP code as shown below. This suggest that private exponents are encrypted using AES, most probably in CBC mode, with an added HMAC-SHA256 to check encrypted data integrity. Those might be further encrypted with the Android key store master key when stored on disk.<br /><br /><pre>#define KM_MAGIC_NUM (0x4B4D4B42) /* "KMKB" Key Master Key Blob in hex */<br />#define KM_KEY_SIZE_MAX (512) /* 4096 bits */<br />#define KM_IV_LENGTH (16) /* AES128 CBC IV */<br />#define KM_HMAC_LENGTH (32) /* SHA2 will be used for HMAC */<br /><br />struct qcom_km_key_blob {<br /> uint32_t magic_num;<br /> uint32_t version_num;<br /> uint8_t modulus[KM_KEY_SIZE_MAX];<br /> uint32_t modulus_size;<br /> uint8_t public_exponent[KM_KEY_SIZE_MAX];<br /> uint32_t public_exponent_size;<br /> uint8_t iv[KM_IV_LENGTH];<br /> uint8_t encrypted_private_exponent[KM_KEY_SIZE_MAX];<br /> uint32_t encrypted_private_exponent_size;<br /> uint8_t hmac[KM_HMAC_LENGTH];<br />};<br /></pre><br />So, in the case of the Nexus 4, the 'hardware' is simply the ARM SoC. Are other implementations possible? Theoretically, a hardware-backed <code>keymaster</code> implementation does not need to be based on TrustZone. Any dedicated device that can generate and store keys securely can be used, the usual suspects being embedded secure elements (SE) and TPMs. However, there are no mainstream Android devices with dedicated TPMs and recent flagship devices have began shipping <a href="http://www.nfcworld.com/2013/07/30/325212/no-secure-element-in-new-nexus-7/">without embedded SEs</a>, most probably due to carrier pressure (price is hardly a factor, since embedded SEs are usually in the same package as the NFC controller). Of course, all mobile devices have some form of <a href="http://en.wikipedia.org/wiki/UICC" style="-webkit-transition: color 0.3s; background-color: white; color: #009eb8; display: inline; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; outline: none; text-align: justify; text-decoration: none; transition: color 0.3s;" target="_blank">UICC</a> (SIM card), which typically can generate and store keys, so why not use that? Well, Android still doesn't have a standard API to access the UICC, even though 'vendor' firmwares often include one. So while one could theoretically implement a UICC-based <code>keymaster</code> module compatible with the UICC's of your friendly neighbourhood MNO, it is not very likely to happen.<br /><h3>Security level</h3>So how secure are you brand new hardware-backed keys? The answer is, as usual, it depends. If they are stored in a real, dedicated, tamper-resistant hardware module, such as an embedded SE, they are as secure as the SE. And since this technology has been around for over 40 years, and even <a href="https://srlabs.de/rooting-sim-cards/">recent attacks</a> are only effective against SEs using weak encryption algorithms, that means fairly secure. Of course, as we mentioned in the previous section, there are no current <code>keymaster</code> implementations that use actual SEs, but we can only hope.<br /><br />What about TrustZone? It is being aggressively <a href="http://www.arm.com/files/pdf/Tech_seminar_TrustZone_v7_PUBLIC.pdf">marketed</a> as a mobile security 'silver bullet' and streaming media companies have embraced it as an 'end-to-end' DRM solution, but does it really deliver? While the ARM TrustZone architecture might be sound at its core, in the end trusted applications are just software that runs at a slightly lower level than Android. As such, they can be readily reverse engineered, and of course vulnerabilities have been <a href="http://blog.azimuthsecurity.com/2013/04/unlocking-motorola-bootloader.html">found</a>. And since they run within the Secure World they can effectively access everything on the device, including other trusted applications. When exploited, this could lead to very effective and hard to discover <a href="https://www.hackinparis.com/sites/hackinparis.com/files/Slidesthomasroth.pdf">rootkits</a>. To sum this up, while TrustZone secure applications might provide effective protection against Android malware running on the device, given physical access, they, as well as the TrustZone kernel, are exploitable themselves. Applied to the Android key store, this means that if there is an exploitable vulnerability in any of the underlying trusted applications the <code>keymaster</code> module depends on, key-encryption keys could be extracted and 'hardware-backed' keys could be compromised.</div><div><h3>Advanced usage</h3></div><div>As we mentioned in the first section, Android 4.3 offers a well defined public API to the system key store. It should be sufficient for most use cases, but if needed you can connect to the <code>keystore</code> service directly (as always, not really recommended). Because it is not part of the Android SDK, the <code>IKeyStoreService</code> doesn't have wrapper 'Manager' class, so if you want to get a handle to it, you need to get one directly from the <code>ServiceManager</code>. That too is hidden from SDK apps, but, as usual, you can use reflection. From there, it's just a matter of calling the interface methods you need (see <a href="https://github.com/nelenkov/android-keystore">sample project</a> on Github). Of course, if the calling UID doesn't have the necessary permission, access will be denied, but most operations are available to all apps.<br /><br /><pre>Class smClass = Class.forName("android.os.ServiceManager");<br />Method getService = smClass.getMethod("getService", String.class);<br />IBinder binder = (IBinder) getService.invoke(null, "android.security.keystore");<br />IKeystoreService keystore = IKeystoreService.Stub.asInterface(binder);<br /></pre><br />By using the <code>IKeyStoreService</code> directly you can store symmetric keys or other secret data in the system key store by using the <code>put()</code> method, which the current <code>java.security.KeyStore</code> implementation does not allow (it can only store <code>PrivateKey</code>'s). Such data is only encrypted by the key store master key, and even the system key store is hardware-backed, data is not protected by hardware in any way.<br /><br />Accessing hidden services is not the only way to augment the system key store functionality. Since the <code>sign()</code> operation implements a 'raw' signature operation (RSASP1 in <a href="http://www.ietf.org/rfc/rfc3447.txt">RFC 3447</a>), key store-managed (including hardware-backed) keys can be used to implement signature algorithms not natively supported by Android. You don't need to use the <code>IKeyStoreService</code> interface, because this operation is available through the standard JCE <code>Cipher</code> interface: <br /><br /><pre>KeyStore ks = KeyStore.getInstance("AndroidKeyStore");<br />ks.load(null);<br />KeyStore.Entry keyEntry = keyStore.getEntry("key1", null);<br />RSAPrivteKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey();<br /><br />Cipher c = Cipher.getInstance("RSA/ECB/NoPadding");<br />cipher.init(Cipher.ENCRYPT_MODE, i privateKey);<br />byte[] result = cipher.doFinal(in, o, in.length);<br /></pre><br />If you use this primitive to implement, for example, <a href="http://www.bouncycastle.org/">Bouncy Castle</a>'s <code>AsymmetricBlockCipher</code> interface, you can use any signature algorithm available in the Bouncy Castle lightweight API (we actually use <a href="http://rtyley.github.io/spongycastle/">Spongy Castle</a> to stay compatible with Android 2.x without too much hastle). For example, if you want to use a more modern (and provably secure) signature algorithm than Android's default PKCS#1.5 implementation, such as RSA-PSS you can accomplish it with something like this (see <a href="https://github.com/nelenkov/android-keystore">sample project</a> for <code>AndroidRsaEngine</code>):<br /><br /><pre>AndroidRsaEngine rsa = new AndroidRsaEngine("key1", true);<br /><br />Digest digest = new SHA512Digest();<br />Digest mgf1digest = new SHA512Digest();<br />PSSSigner signer = new PSSSigner(rsa, digest, mgf1digest, 512 / 8);<br />RSAKeyParameters params = new RSAKeyParameters(false,<br /> pubKey.getModulus(), pubKey.getPublicExponent());<br /><br />signer.init(true, params);<br />signer.update(signedData, 0, signedData.length);<br />byte[] signature = signer.generateSignature();<br /></pre><br />Likewise, if you need to implement RSA key exchange, you can easily make use of OAEP padding like this: <br /><br /><pre>AndroidRsaEngine rsa = new AndroidRsaEngine("key1", false);<br /><br />Digest digest = new SHA512Digest();<br />Digest mgf1digest = new SHA512Digest();<br />OAEPEncoding oaep = new OAEPEncoding(rsa, digest, mgf1digest, null);<br /><br />oaep.init(true, null);<br />byte[] cipherText = oaep.processBlock(plainBytes, 0, plainBytes.length);<br /></pre><br />The <a href="https://github.com/nelenkov/android-keystore">sample application</a> shows how to tie all of those APIs together and features an elegant and fully Holo-compatible user interface:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-gnTCgqC89AI/UhOBYxf1csI/AAAAAAAAPQw/rdHISlhAnsg/s1600/android-keystore-43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://4.bp.blogspot.com/-gnTCgqC89AI/UhOBYxf1csI/AAAAAAAAPQw/rdHISlhAnsg/s400/android-keystore-43.png" width="240" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"></div><br />An added benefit of using hardware-backed keys is that, since they are not generated using Android's default <code>SecureRandom</code> implementation, they should not be affected by the recently announced <a href="http://android-developers.blogspot.jp/2013/08/some-securerandom-thoughts.html"><code>SecureRandom</code> vulnerability</a> (of course, since the implementation is closed, we can only hope that trusted apps' RNG actually works...). However, Bouncy Castle's PSS and OAEP implementations do use <code>SecureRandom</code> internally, so you might want to seed the PRNG 'manually' before starting your app to make sure it doesn't start with the same PRNG state as other apps. The <code>keystore</code> daemon/service uses <code>/dev/urandom</code> directly as a source of randomness, when generating master keys used for key file encryption, so they should not be affected. RSA keys generated by the <code>softkeymaster</code> OpenSSL-based software implementation might be affected, because OpenSSL uses <code>RAND_bytes()</code> to generate primes, but are probably OK since the <code>keystore</code> daemon/service runs in a dedicated process and the OpenSSL PRNG automatically seeds itself from <code>/dev/urandom</code> on first access (unfortunately there are no official details about the 'insecure SecureRandom' problem, so we can't be certain).<br /><h3>Summary</h3></div><div>Android 4.3 offers a standard SDK API for generating and accessing app-private RSA keys, which makes it easier for non-system apps to store their keys securely, without implementing key protection themselves. The new Jelly Bean also offers hardware-backed key storage on supported devices, which guarantees that even system or root apps cannot extract the keys. Protection against physical access attacks depends on the implementation, with most (all?) current implementations being TrustZone-based. Low-level RSA operations with key store managed keys are also possible, which enables apps to use cryptographic algorithms not provided by Android's built-in JCE providers.</div><div><br /></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-56767685658563947862013-07-23T19:51:00.000-07:002014-02-01T04:50:15.688-08:00Building a wireless Android device using BeagleBone BlackOur <a href="http://nelenkov.blogspot.com/2013/04/android-code-signing.html">previous</a> <a href="http://nelenkov.blogspot.com/2013/05/code-signing-in-androids-security-model.html">posts</a> were about code signing in Android, and they turned out to be surprisingly relevant with the announcement of the '<a href="http://bluebox.com/corporate-blog/bluebox-uncovers-android-master-key">master key'</a> code signing Android vulnerability. While details are yet to be formally released, it has been already <a href="https://jira.cyanogenmod.org/browse/CYAN-1602">patched</a> and <a href="http://www.saurik.com/id/17">dissected</a>, so we'll skip that one and try something different for a change. This post is not directly related to Android security, but will discuss some Android implementation details, so it might be of some interest to our regular readers. Without further ado, let's get closer to the metal than usual and build a wireless Android device (almost) from scratch.<br /><h2>Board introduction -- BeagleBone Black</h2><div>For our device we'll use the recently released <a href="http://beagleboard.org/Products/BeagleBone%20Black">BeagleBone Black</a> board. So what is a BeagleBone Black (let's call it BBB from now on), then? It's the latest addition to the ranks of ARM-based, single board credit-card-sized computers. It comes with an <a href="http://www.ti.com/product/am3359">AM335x 1GHz ARM Cortex-A8 </a>CPU, 512MB RAM, 2GB on-board eMMC flash, Ethernet, HDMI and USB ports, plus a whole lot of I/O pins. Best of all, it's open source hardware, and all schematics and design documents are <a href="https://github.com/CircuitCo/BeagleBone-Black-RevA5B/">freely available</a>. It's hard to beat the price of $45 and it looks much, much better than the jagged Raspberry Pi. It comes with <a href="http://www.angstrom-distribution.org/">Angstrom</a> Linux pre-installed, but can run pretty much any Linux flavour, and of course, Android. It is being used for anything from <a href="http://learn.adafruit.com/blinking-an-led-with-beaglebone-black/overview">blinking LEDs</a> to <a href="http://travisgoodspeed.blogspot.jp/2013/07/hillbilly-tracking-of-low-earth-orbit.html">tracking satellites</a>. You can hook it up to circuits you've build or quickly extend it using one of the many '<a href="http://circuitco.com/support/index.php?title=BeagleBone_Capes">cape</a>' plug-in boards available. We'll use a couple of those for our project, so 'building' refers mostly to creating an Android build compatible with our hardware. We'll detail the hardware later, but let's first outline some simple requirements for our mobile Android device:</div><div><ol><li>touch screen input</li><li>wireless connectivity via WiFi</li><li>battery powered</li></ol><div>Here's what we start with:<br /><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-BIoretDmICI/Ue6ry1zNfuI/AAAAAAAAPB4/AGB554u9pCo/s1600/bbb-scaled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="http://3.bp.blogspot.com/-BIoretDmICI/Ue6ry1zNfuI/AAAAAAAAPB4/AGB554u9pCo/s400/bbb-scaled.png" width="400" /></a></div><h2>Building a kernel for Android</h2></div></div>Android support for AM335x-based devices is provided by the <a href="https://code.google.com/p/rowboat/">rowboat</a> project. It integrates the required kernel and OS patches and provides build configurations for each of the supported devices, including the BBB. The latest version is based on Android 4.2.2 and if you want to get started quickly, you can download a <a href="http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/exports/TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz">binary build</a> from TI's Sitara Android <a href="http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/index_FDS.html">development kit page</a>. All you need to do is flash it to an SD card, connect the BBB to an HDMI display and power it on. You will instantly get a fully working, hardware-accelerated Jelly Bean 4.2 device you can control using standard USB keyboard and mouse. If that is all you need, you might as well stop reading here. Our first requirement, however is a working touch screen, not an HDMI monitor, so we have some work to do. As it happens, a number of LCD capes are already available for the BBB (from <a href="http://circuitco.com/">circuitco</a> and others), so those are our first choice. We opted for the <a href="http://circuitco.com/support/index.php?title=BeagleBone_LCD4">LCD4</a> 4.3" cape which offers almost reasonable resolution and is small enough to be directly attached to the BBB. Unfortunately it doesn't work with the <i>rowboat</i> build from TI. To understand why, let's take a step back and discuss how the BBB supports extension hardware, including capes.<br /><div><h3>Linux Device Tree and cape support</h3><div><div>If you look at the expansion header pinout table in the BBB <a href="https://github.com/CircuitCo/BeagleBone-Black-RevA5B/blob/master/BBB_SRM.pdf?raw=true">reference manual</a>, you will notice that each pin can serve multiple purposes, depending on configuration. This is called 'pinmuxing' and is the method modern SoC's use to multiplex multiple peripheral functions to a limited set of physical pins. The AM335x CPU the BBB uses is no exception: it has pins with up to 8 possible peripheral functions. So, in order for a cape to work, the SoC needs to be configured to use the correct inputs/outputs for that cape. The situation becomes more complicated when you have multiple capes (up to 4 at a time). BBB capes solve this by using EEPROM that stores enough data to identify the cape, its revision and serial number. At boot time, the kernel identifies the capes by reading their EEPROMs, computes the optimal configuration (or outputs and error if the connected capes are not compatible) and sets the expansion header pinmux accordingly. Initially, this was implemented in a 'board file' in the Linux kernel, and adding a new cape required modifying the kernel and making sure all possible cape configurations were supported. Needless to say, this is not an easy task, and getting it merged into Linux mainline is even harder. Since everyone is building some sort of ARM device nowadays, the number of board files and variations thereof reached critical mass, and Linux kernel maintainers decided to decouple board specific behaviour from the kernel. The mechanism for doing this is called Device Tree (DT) and its goal is to make life easier for both device developers (no need to hack the kernel for each device) and kernel maintainers (no need to merge board-specific patches every other day). A DT is a data structure for describing hardware which is passed to the kernel at boot time. Using the DT, a generic board driver can configure itself dynamically. The BBB ships with a <a href="http://linuxgizmos.com/introducing-the-new-beaglebone-black-kernel/">3.8 kernel </a>and takes full advantage of the new DT architecture. Cape support is naturally implemented using DT source (DTS) files and even goes a step further than mainline Linux by introducing a <a href="http://elinux.org/Capemgr">Cape Manager</a>, an in-kernel mechanism for dynamically loading <a href="http://elinux.org/Device_Trees">Device Tree</a> fragments from userspace. This allows for runtime (vs. boot time) loading of capes via <code>sysfs</code>, resource conflict resolution (where possible), manual control over already loaded capes and more.</div><div><br /></div><div>Going back to Android, the <i>rowboat</i> Android port is using the 3.2 kernel and relies on manual porting of extension peripheral configuration to the kernel board file. As it happens, support for our LCD4 cape is not there yet. We could try to patch the kernel based on the 3.8 DTS files, or take the plunge and attempt to run Android using 3.8. Since all BBB active development is going on in the <a href="https://github.com/beagleboard/kernel/commits/3.8">3.8 branch</a>, using the newer version is the better (if more involved) choice.<br /><h3>Using the 3.8 kernel</h3></div></div></div>As we know, Android adds a bunch of 'Androidisms' to the Linux kernel, most notably wakelocks, alarm timers, ashmem, binder, low memory killer and 'paranoid' network security. Thus you could not use a vanilla Linux kernel as is to run Android until recently, and a number of Android-specific patches needed to be applied first. Fortunately, thanks to the <a href="http://elinux.org/Android_Mainlining_Project">Android Mainlining Project</a>, most of these features are already merged (in one form or another) in the 3.8 kernel and are available as staging drivers. What this means is that we can take a 3.8 kernel that works well on the BBB and use it run Android. Unfortunately, the BBB can't quite use a vanilla 3.8 kernel yet and requires quite a few patches (including Cape Manager). However, building a 3.8 kernel with all BBB patches applied is not too hard to do, thanks to <a href="http://www.eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-LinuxKernel">instructions</a> and build scripts by <a href="https://github.com/RobertCNelson/">Robert Nelson</a>. Even better, <a href="http://icculus.org/~hendersa/">Andrew Henderson</a> has successfully used it in Android and has detailed the <a href="http://procedure./">procedure.</a> Following Andrew's build instructions, we can create an Android build that has a good chance of supporting our touch screen. As Andrew's article mentions, hardware acceleration (support for the BBB's PowerVR SGX 530 GPU)<span style="background-color: white; color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px;"> is not yet available for the 3.8 kernel, so we need to disable it in our build. </span>One thing that is missing from Andrew's instruction is that you also need to disable building and installing of the SGX drivers, otherwise Android will try to use them at boot and fail to start SurfaceFlinger due to driver-kernel module incompatibility. You can do this by commenting out the dependency on <code>sgx</code> in rowboat's top-level <code>Makefile</code> like this:<br /><br /><pre>@@ -11,7 +13,7 @@<br /> CLEAN_RULE = sgx_clean wl12xx_compat_clean kernel_clean clean<br /> else<br /> ifeq ($(TARGET_PRODUCT), beagleboneblack)<br />-rowboat: sgx<br />+#rowboat: sgx<br /> CLEAN_RULE = sgx_clean kernel_clean clean<br /> else<br /> ifeq ($(TARGET_PRODUCT), beaglebone)<br /><br /></pre><br />Note that the kernel alone is not enough though: the boot loader (<a href="http://www.denx.de/wiki/U-Boot">Das U-Boot)</a> needs to be able to load the (flattened) device tree blob, so we need to build a recent version of that as well. Android seems to run OK with this configuration, but there are still a few things that are missing. The first you might notice is ADB support.<br /><h3>ADB support</h3><div>ADB (Android Debug Bridge) is one of the best things to came out of the Android project, and if you have been doing Android development in any form for a while, you probably take it for granted. It is a fairly complex piece of software though, providing support for debugging, file transfer, port forwarding and more and requires kernel support in addition to the Android daemon and client application. In kernel terms this is known as the 'Android USB Gadget Driver', and it is not quite available in the 3.8 kernel, even though there have been multiple attempts at merging it. We can merge the required bits from Google's 3.8 kernel tree, but since we are trying to stay as close as possible to the original BBB 3.8 kernel, we'll use a different approach. While attempts to get ADB in the mainline continue, <a href="http://cateee.net/lkddb/web-lkddb/USB_FUNCTIONFS.html">Function Filesystem</a> (FunctionFS) driver support has been added to Android's ADB and we can use that instead of the 'native' Android gadget. To use ADB with FunctionFS:</div><div><ol><li>Configure FunctionFS support in the kernel (<code>CONFIG_USB_FUNCTIONFS=y</code>):</li><ul><pre>Device Drivers -> USB Support -> <br /> USB Gadget Support -> USB Gadget Driver -> Function Filesystem<br /></pre></ul><li>Modify the boot parameters in uEnv.txt to set the vendor and product IDs, as well as the device serial number</li><ul><pre>g_ffs.idVendor=0x18d1 g_ffs.idProduct=0x4e26 g_ffs.iSerialNumber=<serial></pre></ul><li>Setup the FunctionFS directory and mount it in your <code>init.am335xevm.usb.rc</code> file:</li><ul><pre>on fs<br /> mkdir /dev/usb-ffs 0770 shell shell<br /> mkdir /dev/usb-ffs/adb 0770 shell shell<br /> mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000<br /></pre></ul><li>Delete all lines referencing <code>/sys/class/android_usb/android0/*</code>. (Those nodes are created by the native Android gadget driver and are not available when using FunctionFS.)<br /></li></ol>Once this is done, you can reboot and you should see your device using <code>adb devices</code> soon after the kernel has loaded. Now you can debug the OS using Eclipse and push and install files directly using ADB. That said, this won't help you at all if the device doesn't boot due to some kernel misconfiguration, so you should definitely get an <a href="http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm">FTDI cable</a> (the BBB does not have an on-board FTDI chip) to be able to see kernel messages during boot and get an 'emergency' shell when necessary.<br /><h3>cgroups patch</h3></div><div>If you are running <code>adb logcat</code> in a console and experimenting with the device, you will notice a lot of 'Failed setting process group' warnings like this one: <br /><br /><pre>W/ActivityManager( 349): Failed setting process group of 4911 to 0<br />W/SchedPolicy( 349): add_tid_to_cgroup failed to write '4911' (Permission denied);<br /></pre><br />Android's <code>ActivityManager</code> uses Linux control groups (<a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups)</a> to run processes with different priorities (background, foreground, audio, system) by adding them to scheduling groups. In the mainline kernel this is only allowed to processes running as <code>root</code> (<code>EUID=0</code>), but Android changes this behaviour (naturally, with a patch) to only require the <code>CAP_SYS_NICE</code> capability, which allows the <code>ActivityManager</code> (running as <code>system</code> in the <code>system_server</code> process) to add app processes to scheduling groups. To get rid of this warning, you can disable scheduling groups by commenting out the code that sets up <code>/dev/cpuctl/tasks</code> in <code>init.rc</code>, or you can merge the modified functionality form Google's experimental 3.8 branch (which we've been trying to avoid all along...). <br /><h2>Android hardware support</h2><h3>Touchscreen</h3>We now have a functional Android development device running mostly without warnings, so it's time to look closer at requirement #1. As we mentioned, once we disable hardware acceleration, the LCD4 works fine with our 3.8 kernel, but a few things are still missing. The LCD4 comes with 5 directional GPIO buttons which are somewhat useful because scrolling on a resistive touchscreen takes some getting used to, but that is not the only thing they can be used for. We can remap them as Android system buttons (Back, Home, etc) by providing a <a href="http://source.android.com/devices/tech/input/key-layout-files.html">key layout</a> (.kl) file like this one: <br /><br /><pre>key 105 BACK WAKE<br />key 106 HOME WAKE<br />key 103 MENU WAKE<br />key 108 SEARCH WAKE<br />key 28 POWER WAKE<br /></pre><br />The GPIO keypad on the LCD identifies itself as 'gpio.12' (you can check this using the <code>getevent</code> command), so we need to name the layout file to 'gpio_keys_12.kl'. To achieve this we modify <code>device.mk</code> in the BBB device directory (<code>device/ti/beagleboneblack</code>): <br /><br /><pre>...<br /># KeyPads<br />PRODUCT_COPY_FILES += \<br /> $(LOCAL_PATH)/gpio-keys.kl:system/usr/keylayout/gpio_keys_12.kl \<br />...<br /></pre><br />Now that we are using hardware buttons, we might want to squeeze some more screen real estate from the LCD4 by not showing the system navigation bar. This is done by setting <code>config_showNavigationBar</code> to <code>false</code> in the <code>config.xml</code> framework overlay file for our board:<br /><br /><pre><bool name="config_showNavigationBar">false</bool><br /></pre><br />While playing with the screen, we notice that it's a bit dark. Increasing the brightness via the display settings however does not seem to work. A friendly error message in logcat tells us that Android can't open the <code>/sys/class/backlight/pwm-backlight/brightness</code> file. Screen brightness and LEDs are controlled by the <code>lights</code> module on Android, so that's where we look first. There is a a hardware-specific one under the beagleboneblack device directory, but it only supports the LCD3 and LCD7 displays. Adding support for the LCD4 is simply a matter of finding the file that controls brightness under /sys. For the LCD4 it's called <code>/sys/class/backlight/backlight.10/brightness</code> and works exactly like the other LCDs -- you get or set the brightness by reading or writing the backlight intensity level (0-100) as a string. We modify <code>light.c</code> (full source on <a href="https://github.com/nelenkov/android_device_ti_beagleboneblack/blob/master/liblights/lights.c">Github)</a> to first try the LCD4 device and voila -- setting the brightness via the Android UI now works... not. It turns out the <code>brightness</code> file is owned by <code>root</code> and the Settings app doesn't have permission to write to it. We can change this permission in the board's <code>init.am335xevm.rc file</code>:<br /><br /><pre># PWM-Backlight for display brightness on LCD4 Cape<br />chmod 0666 /sys/class/backlight/backlight.10<br /></pre><br />This finally settles it, so we can cross requirement #1 off our list and try to tackle #2 -- wireless support.<br /><h3>WiFi adapter</h3></div><div>The BBB has an onboard Ethernet port and it is supported out of the box by the <i>rowboat</i> build. If we want to make our new Android device mobile though, we need to add either a WiFi adapter or 3G modem. 3G support is possible, but somewhat more involved, so we will try to enable WiFi first. There are a <a href="http://beagleboardtoys.info/index.php?title=BeagleBone_TiWi-BLE_w/_Chip_Antenna">number </a>of <a href="http://beagleboardtoys.info/index.php?title=BeagleBone_TiWi-5E_w/_Chip_Antenna">capes</a> that provide WiFi and Bluetooth for the original BeagleBone, but they are not compatible with the BBB, so we will try using a regular WiFi dongle instead. As long as it has a Linux driver, it should be quite easy to wire it to Android by following the TI <a href="http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide#WLAN">porting guide</a>, right?<br /><br /></div><div></div><div>We'll use a WiFi dongle from <a href="http://lm-technologies.com/">LM Technolgies</a> based on the Realtek <a href="http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=48&Level=5&Conn=4&ProdID=274">RTL8188CUS</a> chipset which is supported by the Linux <code>rtl8192cu</code> driver. In addition to the kernel driver, this wireless adapter requires a binary firmware blob, so we need to make sure it's loaded along with the kernel modules. But before getting knee-deep into makefiles, let's briefly review the Android WiFi architecture. Like most hardware support in Android, it consists of a kernel layer (WiFi adapter driver modules), native daemon (<code>wpa_supplicant</code>), HAL (<code>wifi.c</code> in <code>libharware_legacy</code>, communicates with <code>wpa_supplicant</code> via its control socket), a framework service and its public interface (<code>WifiService</code> and <code>WifiManager</code>) and application/UI ('WiFi' screen in the Settings app, as well as <code>SystemUI</code>, responsible for showing the WiFi status bar indicator). That may sound fairly straightforward, but the <code>WifiService</code> implements some pretty complex state transitions in order to manage the underlying native WiFi support. Why is all the complexity needed? Android doesn't load kernel modules automatically, so the <code>WifiStateMachine</code> will try to load kernel modules, find and load any necessary firmware, start the <code>wpa_supplicant</code> daemon, scan for and connect to an AP, obtain an IP address via DHCP, check for and handle captive portals, and finally, if you are lucky, set up the connection and send out a broadcast to notify the rest of the system of the new network configuration. The <code>wpa_supplicant</code> daemon alone can go through 13 <a href="http://developer.android.com/reference/android/net/wifi/SupplicantState.html">different states</a>, so things can get quite involved when those are combined.<br /><br />Going step-by-step through the porting guide, we first enable support for our WiFi adapter in the kernel. That results in 6 modules that need to be loaded in order, plus the firmware blob. The HAL (<code>wifi.c</code>) can only load a single module though, so we pre-load all modules in the board's <code>init.am335xevm.rc</code> and set the <code>wlan.driver.status</code> to <code>ok</code> in order to prevent <code>WifiService</code> from trying (and failing) to load the kernel module. We then define the <code>wpa_supplicant</code> and <code>dhcpd</code> services in the init file. Last, but not least, we need to set the <code>wifi.interface</code> property to <code>wlan0</code>, otherwise Android will silently try to use a test device and fail to start the <code>wpa_supplicant</code>. Both properties are set as <code>PRODUCT_PROPERTY_OVERRIDES</code> in <code>device/ti/beagleboneblack/device.mk</code> (see device directory on <a href="https://github.com/nelenkov/android_device_ti_beagleboneblack">Github)</a>. Here's how the relevant part from <code>init.am335xevm.rc</code> looks like: <br /><br /><pre>on post-fs-data<br /> # wifi<br /> mkdir /data/misc/wifi/sockets 0770 wifi wifi<br /> insmod /system/lib/modules/rfkill.ko<br /> insmod /system/lib/modules/cfg80211.ko<br /> insmod /system/lib/modules/mac80211.ko<br /> insmod /system/lib/modules/rtlwifi.ko<br /> insmod /system/lib/modules/rtl8192c-common.ko<br /> insmod /system/lib/modules/rtl8192cu.ko<br /><br />service wpa_supplicant /system/bin/wpa_supplicant \<br /> -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \<br /> -e/data/misc/wifi/entropy.bin<br /> class main<br /> socket wpa_wlan0 dgram 660 wifi wifi<br /> disabled<br /> oneshot<br /><br />service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL<br /> class main<br /> disabled<br /> oneshot<br /><br />service iprenew_wlan0 /system/bin/dhcpcd -n<br /> class main<br /> disabled<br /> oneshot<br /><br /></pre><br />In order to build the <code>wpa_supplicant daemon</code>, we then set <code>BOARD_WPA_SUPPLICANT_DRIVER</code> and <code>WPA_SUPPLICANT_VERSION</code> in <code>device/ti/beagleboneblack/BoardConfig.mk</code>. Note the we are using the generic <code>wpa_supplicant</code>, not the TI-patched one and the <code>WEXT</code> driver instead of the <code>NL80211</code> one (which requires a proprietary library to be linked in). Since we are preloading driver kernel modules, we don't need to define <code>WIFI_DRIVER_MODULE_PATH</code> and <code>WIFI_DRIVER_MODULE_NAME</code>. <br /><br /><pre>BOARD_WPA_SUPPLICANT_DRIVER := WEXT<br />WPA_SUPPLICANT_VERSION := VER_0_8_X<br />BOARD_WLAN_DEVICE := wlan0<br /></pre><br />To make the framework aware of our new WiFi device, we change <code>networkAttributes</code> and <code>radioAttributes</code> in the <code>config.xml</code> overlay file. Getting this wrong will lead to Android's <code>ConnectionManager</code> totally ignoring WiFi even if you manage to connect and will result in the not too helpful 'No network connection' message. "1" here corresponds to the <code>ConnectivityManager.TYPE_WIFI</code> connection type (the built-in Ethernet connection is "9", <code>TYPE_ETHERNET</code>).<br /><br /><pre><string-array name="networkAttributes" translatable="false"><br />...<br /> <item>"wifi,1,1,1,-1,true"</item><br />...<br /></string-array><br /><string-array name="radioAttributes" translatable="false"><br /> <item>"1,1"</item><br />...<br /></string-array><br /></pre><br />Finally, to make Android aware of our newly found WiFi features, we copy <code>android.hardware.wifi.xml</code> to <code>/etc/permissions/</code> by adding it to <code>device.mk</code>. This will take care of enabling the Wi-Fi screen in the <code>Settings</code> app:</div><br /><pre>PRODUCT_COPY_FILES := \<br />...<br /> frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \<br />...<br /></pre><br />After we've rebuild <i>rowboat </i>and updated the root file system, you should be able to turn on WiFi and connect to an AP. Make sure you are using an AC power supply to power the BBB, because the WiFi adapter can draw quite a bit of current and you may not get enough via the USB cable. If the board is not getting enough power, you might experience failure to scan, dropping connections and other weird symptoms even if your configuration is otherwise correct. If WiFi support doesn't work for some reason, check the following: <br /><ul><li>that the kernel module(s) and firmware (if any) is loaded (<code>dmesg</code>, <code>lsmod</code>)</li><li><code>logcat</code> output for relevant-lookin error messages</li><li>that the <code>wpa_supplicant</code> service is defined properly in <code>init.*.rc</code> and the daemon is started</li><li>that <code>/data/misc/wifi</code> and <code>wpa_supplicant.conf</code> are available and have the right owner and permissions (<code>wifi:wifi</code> and 0660)</li><li>that the <code>wifi.interface</code> and <code>wlan.driver.status</code> properties are set correctly</li><li>use your debugger if all else fails</li></ul>That was easy, right? We now have a working wireless connection, it's time to think about requirement #3, powering the device.<br /><h3>Battery power</h3><div>The BBB can be powered in three ways: via the miniUSB port, via the 5V AC adapter jack, and by using the power rail (<code>VDD_5V</code>) on the board directly. We can use any USB battery pack that provides enough current (~1A) and has enough capacity to keep the device going by simply connecting it to the miniUSB port. Those can be rather bulky and you will need an extra cable, so let's look for other options. As can be expected, there is a cape for that. The aptly named <a href="http://circuitco.com/support/index.php?title=BeagleBone_Battery">Battery Cape</a> plugs into the BBB's expansion connectors and provides power directly to the power rail. We can plug the LCD4 on top of it and get an integrated (if a bit bulky) battery-powered touchscreen device. The Battery Cape holds 4 AA batteries connected as two sets in parallel. It is not simply a glorified battery holder though -- it has a boost converter that can provide stable 1A current at 5V even if battery voltage fluctuates (1.8-5.5V). It does provide support for monitoring battery voltage via AIN4 input, but does not have a 'fuel gauge' chip so we can't display battery level in Android without adding additional circuitry. That is ways our mobile device cannot display the battery level (yet) and unfortunately won't be able to shut itself down when battery levels become critically low. That is something that definitely needs work, but for now we make the device always believe it's at 100% power by setting the <code>hw.nobattery</code> property to <code>true</code>. The alternative is to have it display the 'low battery' red warning icon all the time, so this approach is somewhat preferable. Four 1900 mAh batteries installed in the battery cape should provide enough power to run the device for a few hours even when using WiFi, so we can (tentatively) mark requirement #3 as fulfilled.<br /><h2>Flashing the device</h2></div><div>If you have been following Andrew Henderson's build <a href="http://icculus.org/~hendersa/android/">guide </a>linked above, you have been 'installing' Android on an SD card and booting the BBB from it. This works fine and makes it easy to fix things when Android won't load by simply mounting the SD card on your PC and editing or copying the necessary files. However, most consumer grade SD cards don't offer the best performance and can be quite unreliable. As we mentioned at the beginning of the post, the BBB comes with 2GB of built-in eMMC, which is enough to install Android and have some space left for a data partition. On most Android devices flashing can be performed by either booting into the recovery system or by using the <a href="http://en.wikipedia.org/wiki/Fastboot"><code>fastboot</code></a> tool over USB. The <i>rowboat</i> build does not have a recovery image, and while <code>fastboot</code> is supported by TI's fork of U-Boot, the version we are using to load the DT blob does not support <code>fastboot</code> yet. That leaves booting another OS in lieu of a recovery and flashing the eMMC form there, either manually or by using an automated <a href="http://www.crashcourse.ca/wiki/index.php/BBB_software_update_process">flasher image</a>. The flasher image simply runs a script at startup, so let's see how it works by doing it manually first. The latest BBB Angstrom <a href="http://downloads.angstrom-distribution.org/demo/beaglebone/">bootable image</a> (<b>not</b> the flasher one) is a good choice for our 'recovery' OS, because it is known to work on the BBB and has all the needed tools (<code>fdisk</code>, <code>mkfs.ext4</code>, etc.). After you <code>dd</code> it to an SD card, mount the card on your PC and copy the Android boot files and <code>rootfs</code> archive to an <code>android/</code> directory. You can then boot from the SD card, get a root shell on the Angstrom and install Android to the eMMC from there.<br /><br />Android devices typically have a <code>boot</code>, <code>system</code> and <code>userdata</code> parition, as well as a <code>recovery</code> one and optionally others. The boot partition contains the kernel and a ramdisk which gets mounted at the root of the device filesystem. <code>system</code> contains the actual OS files and gets mounted read-only at <code>/system</code>, while <code>userdata</code> is mounted read-write at <code>/data</code> and stores system and app data, as well user-installed apps. The partition layout used by the BBB is slightly different. The board ootloader will look for the first stage bootloader (SPL, named MLO in U-Boot) on the first FAT partition of the eMMC. It in turn will load the second state bootloader (<code>u-boot.img</code>) which will then search for a OS image according to its configuration. On embedded devices U-Boot configuration is typically stored as a set of variables in NAND, replaced by the <code>uEnv.txt</code> file on devices without NAND such as the BBB. Thus we need a FAT boot partition to host the SPL, <code>u-boot.img</code>, <code>uEnv.txt</code>, the kernel image and the DT blob. <code>system</code> and <code>userdata</code> will be formatted as EXT4 and will work as in typical Android devices.<br /><br />The default Angstrom installations creates only two partitions -- a DOS one for booting, and a Linux one that hosts Angstrom Linux. To prepare the eMMC for Android, you need to delete the Linux partition and create two new Linux partitions in its place -- one to hold Android system files and one for user data. If you don't plan to install too many apps, you can simply make them equal sized. When booting from the SD card, the eMMC device will be <code>/dev/block/mmcblk1</code>, with the first partition being <code>/dev/block/mmcblk1p1</code>, the second <code>/dev/block/mmcblk1p2</code> and so on. After creating those 3 partitions with <code>fdisk</code> we format them with their respective filesystems:<br /><br /><pre># mkfs.vfat -F 32 -n boot /dev/block/mmcblk1p1<br /># mkfs.ext4 -L rootfs /dev/block/mmcblk1p2 <br /># mkfs.ext4 -L usrdata /dev/block/mmcblk1p3 <br /></pre><br />Next, we mount <code>boot</code> and copy boot related files, then mount <code>rootfs</code> and untar the <code>rootfs.tar.bz2</code> archive. <code>usrdata</code> can be left empty, it will be populated on first boot.<br /><br /><pre># mkdir -p /mnt/1/<br /># mkdir -p /mnt/2/<br /># mount -t vfat /dev/block/mmcblk1p1 /mnt/1<br /># mount -t ext4 /dev/block/mmcblk1p2 /mnt/2<br /># cp MLO u-boot.img zImage uEnv.txt am335x-boneblack.dtb /mnt/1/<br /># tar jxvf rootfs.tar.bz2 -C /mnt/2/<br /># umount /mnt/1<br /># umount /mnt/2<br /></pre><br />With this, Android is installed on the eMMC and you can shutdown the 'recovery' OS, remove the SD card and boot from the eMMC. Note that the U-Boot used has been patched to probe whether the SD card is available and will automatically boot from it (without you needing to hold the BBB's user boot button), so if you don't remove the 'recovery' SD card, it will boot again.<br /><br />We now have a working, touch screen Android device with wireless connectivity. Here's how it looks in action:<br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-fjDjx-WkU8w/Ue6sFrk-prI/AAAAAAAAPCA/aQ8xn24iklg/s1600/bbb-finished-scaled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="http://3.bp.blogspot.com/-fjDjx-WkU8w/Ue6sFrk-prI/AAAAAAAAPCA/aQ8xn24iklg/s400/bbb-finished-scaled.png" width="400" /></a></div><br />Our device is unlikely to win any design awards or replace your Nexus 7, but it could be used as the basis of dedicated Android devices, such as a wireless POS terminal or a SIP phone and extended even further by adding more capes or custom hardware as needed.</div><h2>Summary</h2><div>The BBB is fully capable of running Android and by adding off-the shelf peripherals you can easily turn it into a 'tablet' (of sorts) by adding a touch screen and wireless connectivity. While the required software is mostly available in the <i>rowboat</i> project, if you want to have the best hardware support you need to use BBB's native 3.8 kernel and configure Android to use it. Making hardware fully available to the Android OS is mostly a matter of configuring the relevant HAL bits properly, but that is not always straightforward, even with board vendor provided <a href="http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide">documentation</a>. The reason for this is that Android subsystems are not particularly cohesive -- you need to modify multiple, sometimes seemingly unrelated, files at different locations to get a single subsystem working. This is, of course, not specific to Android and is the price to pay for building a system by integrating originally unrelated OSS projects. On the positive side, most components can be replaced and the required changes can usually be confined to the (sometimes loosely defined) Hardware Abstraction Layer (HAL). </div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-82282077918842216382013-05-02T09:45:00.000-07:002014-02-01T04:50:15.711-08:00Code signing in Android's security modelIn the <a href="http://nelenkov.blogspot.jp/2013/04/android-code-signing.html">previous post</a> we introduced code signing as implemented in Android and saw that it is practically identical to JAR signing. Android requires all installed packages to be signed and makes heavy use of the attached code signing certificates in its security model. This is where the major differences with other platforms that use code signing lie, so we will explore the topic in more detail.<br /><h3>Java access control</h3><div>Before we start digging into Android's security model, let's go through a quick overview of the corresponding features of the Java platform. Java was initially designed to support running potentially untrusted code, downloaded from a public network (mostly applets). The initial applet sandbox model was extended to a more flexible, policy-based scheme where different permissions can be granted based on the code's origin and author. Code origin refers to the place where classes are loaded from, typically a local file or a remote URL, while authorship is asserted via code signatures and is represented by the signer's certificate chain. Combined those two properties define a <a href="http://docs.oracle.com/javase/7/docs/api/java/security/CodeSource.html">code source</a>. Each code source is granted a set of <a href="http://docs.oracle.com/javase/7/docs/api/java/security/Permissions.html">permissions</a> based on a <a href="http://docs.oracle.com/javase/7/docs/api/java/security/Policy.html">policy</a>, the default implementation being to read rules from a policy file (created with the <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyGuide.html"><code>policytool</code></a>). At runtime a <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityManager.html">security manager</a> (if installed) enforces access control by comparing code elements on the stack with the current policy. It throws a <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html">SecurityException</a> if the permissions required to access a resource have not been granted to the requesting code source. Java code that runs (or is started in) the browser, such as applets or <a href="http://www.oracle.com/technetwork/java/javase/overview-137531.html">Java Web Start </a>applications, is automatically run with a security manager installed, while for local applications you need to explicitly set the <code>java.security.manager</code> in order to install one. In practice, a security manager for local code is only used with some applications servers, and it is usually disabled by default. A wide range of <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html">permissions</a> are supported by the platform, the major ones being <a href="http://docs.oracle.com/javase/7/docs/api/java/io/FilePermission.html">file</a> and <a href="http://docs.oracle.com/javase/7/docs/api/java/net/SocketPermission.html">socket</a>-oriented, as well as different types of <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/RuntimePermission.html">runtime permissions</a> which control operations ranging from class and library loading to managing the current security manager. By defining multiple code sources and assigning each one specific permissions one can implement fine grained access control for both local and remote code.<br /><br />As we mentioned though, unless you are in the browser plugin or application server development business chances are you hadn't heard about any of this until the beginning of this year. Just when everyone thought that Java applets were for all intents and purposes dead, they made somewhat of a comeback as a malware distribution medium. A <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-0422">series</a> of <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-2423">vulnerabilities</a> were discovered in the Oracle Java implementation that allow applets to escape the sandbox they run in and reset the security manager, effectively granting themselves full privileges. The exploits used to achieve this employ techniques ranging from reflection recursion to direct memory manipulation to bypass runtime security checks. Oracle has responded by releasing a series of patches, changing the default applet execution policy and introducing more visible warnings to let users know that potentially harmful code is being executed. Naturally, <a href="http://immunityproducts.blogspot.com.ar/2013/02/keep-calm-and-run-this-applet.html">different</a> <a href="http://immunityproducts.blogspot.jp/2013/04/yet-another-java-security-warning-bypass.html">ways</a> to bypass this are being discovered to <a href="http://malware.dontneedcoffee.com/2013/04/cve-2013-2423-integrating-exploit-kits.html">catch up</a>.<br /><br />In short, Java has had full-featured code access control for some time, even though the most widely used implementation appears to be lacking in enforcing it. But let's (finally!) get back to Android now. As the Java code access control mechanism can use code signer identity to define code sources and grant permissions, and Android code is required to be signed, one might expect that our favourite mobile OS would be making use of the Java's security model in some form, just as it does with JAR files. As it turns out, this is not the case. Access control <a href="http://developer.android.com/reference/java/lang/SecurityManager.html">related</a> <a href="http://developer.android.com/reference/java/security/Permission.html">classes</a> are part of the Java API, and are indeed available in Android. However, looking at the implementation reveals that they are practically empty, with just enough code to compile. In addition, they feature a prominent <i>'Legacy security code; do not use.'</i> notice. So why bother reviewing all of the above then? Even though Android's access control model is very different from the legacy Java one, it does borrow some of the same ideas, and a comparison is helpful when discussing the design decisions made.<br /><h3>Android security architecture basics</h3></div><div>Before we discuss the role of code signing in Android's security model, let's say a few words about Android's general security architecture. As we know, Android is Linux-based and relies heavily on traditional UNIX features to implement its security architecture. Each application runs in a separate process with a distinct identity (user ID, UID). By default apps cannot modify each other's resources and this is enforced by Linux which doesn't allow different processes to access memory or files they don't own (unless access is explicitly granted by the owner, a.k.a <a href="http://en.wikipedia.org/wiki/Discretionary_access_control">discretionary access control</a>). Additionally, each app (UID) is granted a set of logical permissions at install time, and cannot perform operations (call APIs) that require permissions it doesn't have. This is the biggest difference compared to the 'standard' Java permission model: code from different sources running in a single process cannot have different permissions, since permissions are granted at the UID level. Most permissions cannot be dynamically granted after the package has been installed, however as of 4.2 a number of 'development' permissions (e.g., <a href="http://developer.android.com/reference/android/Manifest.permission.html#READ_LOGS"><code>READ_LOGS</code></a>, <a href="http://developer.android.com/reference/android/Manifest.permission.html#WRITE_SECURE_SETTINGS"><code>WRITE_SECURE_SETTINGS</code></a>) have been introduced that can be granted or revoked on demand using the <code>pm grant/revoke</code> command (or matching system APIs). The system will show a confirmation dialog showing permissions requested by an app before installing. With the exception of the new 'development' permissions, all requested permissions are permanently granted if the the user allows the install. For a certain messaging app it looks like this in Jelly Bean:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-CvMQe-ONelk/UYKCM3Y4TrI/AAAAAAAANTM/-Lbfu2sms2Q/s1600/permission-screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://3.bp.blogspot.com/-CvMQe-ONelk/UYKCM3Y4TrI/AAAAAAAANTM/-Lbfu2sms2Q/s400/permission-screen.png" width="240" /></a></div><br /><br />Android permissions are typically implemented by mapping them to Linux groups that have the necessary read/write access to relevant system resources (files or sockets) and thus are ultimately enforced by the Linux kernel. Some permissions are enforced by system daemons or services by explicitly checking if the calling UID is whitelisted to perform a particular operation. The network access permission (<a href="http://developer.android.com/reference/android/Manifest.permission.html#INTERNET"><code>INTERNET</code></a>) is somewhat of a hybrid: it is mapped to a group (<code>inet</code>), but since network access is not associated with one particular socket, the kernel checks whether processes trying to open a socket are members of the <code>inet</code> group on each related system call (known as 'paranoid network security').<br /><br />Each permission has an associated '<a href="http://developer.android.com/guide/topics/manifest/permission-element.html#plevel">protection level</a>' that indicates how the system proceeds when deciding whether to grant or deny the permission. The two levels most relevant to our discussion are <code>signature</code> and <code>signatureOrSystem</code>. The former is granted only to apps signed with the same certificate as the package declaring the permission, while the latter is granted to apps that are in the Android system image, even if the signer is different.<br /><br />Besides the built-in permissions, custom permissions can also be defined by declaring them in the app manifest file. Those can be enforced statically by the system or dynamically by app components. Permissions attached to components (activities, services, broadcast receivers or content providers) defined in <code>AndroidManifest.xml</code> are automatically enforced by the system. Components can also make use of framework APIs to check whether the calling UID has been granted a required permissions on a case-by-case basis (e.g., only for write operations, etc.). We will introduce other permission related details as necessary later, but you can refer to this <a href="http://marakana.com/">Marakana</a> <a href="https://marakana.com/s/post/1393/slides.htm">presentation</a> for a more complete and thorough discussion of Android permissions (and more). Of course, <a href="http://developer.android.com/guide/topics/security/permissions.html">some</a> <a href="http://source.android.com/tech/security/#android-application-security">official</a> <a href="https://developer.android.com/training/articles/security-tips.html#Permissions">documentation</a> is also available.<br /><h3>The role of code signing</h3></div><div>As we saw in the <a href="http://nelenkov.blogspot.com/2013/04/android-code-signing.html">previous article</a>, Android code signing is based on Java JAR signing. Consequently, it uses public key cryptography and X.509 certificates as do a lot of other code signing schemes. However, this is where the similarities end. In practically all other platforms that use code signing (for example <a href="https://en.wikipedia.org/wiki/Java_Platform,_Micro_Edition">Java ME</a>), code signing certificate needs to be issued by a CA that the platform trusts. While there is no lack of CAs that issue code signing certificates, in reality it is quite difficult to obtain a certificate that will be trusted by all targeted devices. Android solves this problem quite simply: it doesn't care about the actual signing certificate. Thus you do not need to have it issued by a CA (although you could, and most will happily take your money), and virtually all code signing certificates used in Android are self-signed. Additionally, you don't need to assert your identity in any way: you can use pretty much anything as the subject name (the Google Play store does have a few checks to weed out some common names, but not the OS itself). Signing certificates are treated as binary blobs by Android, and the fact that they are in X.509 format is merely a consequence of using the JAR format. Android doesn't validate certificates as such: if the certificate is not self-signed, the signing CA's certificate does not have to be present, yet alone trusted; it will also happily install apps with an expired signing certificate. If you are coming from a traditional PKI background, this may sound like heresy, but try to keep an open mind and note that Android does <i>not</i> make use of PKI for code signing.<br /><br />So what are code signing certificates used for then? Two things: making sure updates for an app are coming from the same author (same origin policy), and establishing trust relationships between applications. Both are implemented by comparing the signing certificate of the currently installed target app with the certificate of the update or related application. Comparison <a href="https://github.com/android/platform_frameworks_base/blob/jb-mr1-release/core/java/android/content/pm/Signature.java#L162">boils down</a> to calling <code><a href="http://developer.android.com/reference/java/util/Arrays.html#equals(byte[], byte[])">Arrays.equals()</a></code> on the binary (<a href="http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules#DER_encoding">DER</a>) representation of both certificates. This method naturally knows nothing about CAs or expiration dates. One consequence of this is that once an app (identified by a unique package name) is installed, updates need to use the <i>exact same</i> signing certificates (with one exception, see next section). While multiple signatures on Android apps are not common, if the original application was signed by more than one signer, any updates need to be signed by the same signers, each using its original signing certificate. This means that if your signing certificate(s) expires, you cannot update your app and need to release a new one instead. This would result in not only losing any existing user base or ratings, but more importantly losing access to the legacy app's data and settings (again, there are some exceptions). The solution to this problem is quite simple: don't let your certificate expire. The currently recommended validity period is at least 25 years, and the Google Play Store requires validity until at least October 2033 (Y2K33?). While technically this only amounts to putting off the problem, proper certificate migration support might eventually be added to the platform. Unfortunately, this means that if your signing key is lost or compromised, you are currently out of luck.<br /><br />Let's examine the major uses of code signing in Android in detail.<br /><h3>Application authenticity and identity</h3></div><div>In Android all apps are managed by the system <code>PacakgeManagerService</code>, no matter if they are pre-installed, downloaded from an app market or side loaded. It keeps a database of currently installed apps, including their signing certificate(s), granted permissions and additional metadata in the <code>/data/system/packages.xml</code> file. A typical entry for a user-installed app might look like this:<br /><br /><pre><package codepath="/data/app/com.chrome.beta-2.apk" <br /> flags="572996" ft="13e20480558" <br /> installer="com.android.vending" <br /> it="13ca981cbe3" name="com.chrome.beta" <br /> nativelibrarypath="/data/app-lib/com.chrome.beta-2" <br /> userid="10092" ut="13e204816ce" version="1453060"><br /><sigs count="1"><br /><cert index="8"><br /></cert><br /></sigs><br /><perms><br /><item name="android.permission.NFC"/><br />...<br /><item name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/><br /></perms><br /></package><br /></pre><br />As you can see above, a package entry specifies the package name, the location of the APK and associated libraries, assigned UID and some additional install metadata such as install and update time. This is followed by the number of signatures and the signing certificate as a hexadecimal string. Since a hex-encoded certificate will usually take up around 2K, the actual certificate contents is listed only once. All subsequent packages signed with the same certificate only refer to it by index, as is the case above. The <code>PackageManagerService</code> uses the <code><cert/></code> values in <code>packages.xml</code> to decide whether an update is signed with the same certificate as the original app. The certificate is followed by the list of permissions the package has been granted. All of this information is cached on memory (keyed by package name) at runtime for performance reasons.<br /><br />Just like user-installed apps, pre-installed apps (usually found in <code>/system/app</code>) can be updated without a full-blown system update, usually via the Play Store or a similar app distribution service. As the <code>/system</code> partition is mounted read-only though, updates are installed in <code>/data</code>, while the original app remains as is. In addition to a <code><package/></code> entry, such an app will also have a <code><updated-package></code> entry that might look like this:<br /><br /><pre><updated-package name="com.google.android.youtube" <br /> codePath="/system/app/YouTube.apk" <br /> ft="13cd6667b50" it="13ae93df638" ut="13cd6667b50" <br /> version="4216" <br /> nativeLibraryPath="/data/app-lib/com.google.android.youtube-1" <br /> userId="10067"><br /><perms><br /><item name="android.permission.NFC" /><br />...<br /></perms><br /></updated-package><br /></pre><br />The update (in <code>/data/app</code>) inherits the original app's permissions and UID. System apps receive another special treatment as well: if an updated APK is installed over the original one (in <code>/system/app</code>) it is allowed to be signed with a different certificate. The rationale behind this is that if the installer has enough privileges to write to <code>/system</code>, it can be trusted to change the signing certificate as well. The UID, and any files and permissions are retained. Again, there is an exception though: if the package is part of a shared user (discussed in the next section), the signature cannot be updated, because that would affect other apps as well. In the reverse case, when a new system app signed by a different certificate than that of the currently installed non-system app (with the same package name), the non-system app will be deleted first.<br /><br />Speaking of system apps, most of those are signed by a number of so called 'platform keys'. There are four different keys in the current AOSP tree, named <code>platform</code>, <code>shared</code>, <code>media</code> and <code>testkey</code> (<code>releasekey</code> for release builds). All packages considered part of the core platform (System UI, Settings, Phone, Bluetooth etc.) are signed with the <code>platform</code> key, launcher and contacts related packages -- with the <code>shared</code> key, the gallery app and media related providers -- with the <code>media</code> key, and everything else (including packages that don't explicitly specify the signing key) -- with the <code>testkey</code>. One thing to note is that the keys distributed with AOSP are in no way special, even though they have 'Google' in the certificate DN. Using them to sign your apps will not give you any specific privileges, you will need the actual keys Google or your carrier/device manufacturer uses. Even though the associated certificates may happen to have the same DN as the ones in AOSP, they are different and very unlikely to be publicly accessible. Custom ROMs are often an exception though, and some, including <a href="http://www.cyanogenmod.org/">CyanogenMod</a>, use the AOSP keys, or publicly available keys, as is (there are plans to change this for CyanogenMod though). Sharing the signing key allows packages to work together and establish trust relationships, which we will discuss next.<br /><h3>Inter-application trust relationships</h3><h4>Signature permissions</h4></div><div>As we mentioned above, Android permissions (system or custom) can be declared with the <code>signature</code> protection level. With this level, the permission is only granted if the requesting app is signed by the same signer as the package declaring the permission. This can be thought of as a limited form of mandatory access control (<a href="http://en.wikipedia.org/wiki/Mandatory_access_control">MAC</a>). For custom (app-declared) permission, permissions are declared in the package's <code>AndroidManifest.xml</code> file, and are added to the system when it is installed. Just as other package data, permissions are saved in the <code>/data/system/packages.xml</code> file, as children of the <code><permissions/></code> element. Here's how the declaration of a custom permission used by some Google apps looks like: <br /><br /><pre><permissions><br />..<br /><item name="com.google.android.googleapps.permission.ACCESS_GOOGLE_PASSWORD" <br /> package="com.google.android.gsf.login" <br /> protection="2" /><br />...<br /></permissions><br /></pre><br />The entry has the permission name, declaring package and protection level (2 corresponds to <code>signature</code>) as attributes. When installing a package that requests this permission, the <code>PackageManagerService</code> will perform binary comparison (just as when upgrading packages) of its signing certificate against the certificate of the Google Login Service (the declaring package, <code>com.google.android.gsf.login</code>) in order to decide whether to grant the permission. A noteworthy detail is that the system cannot grant a permission it doesn't know about. That is, if app A declares permission 'foo' and app B uses it, app B needs to be installed after app A, otherwise you will get a warning at install time and the permission won't be granted. Since app installation order typically cannot be guaranteed, the usual workaround for this situation is to declare the permission in both apps. Permissions can also be added and removed dynamically using the <a href="http://developer.android.com/reference/android/content/pm/PackageManager.html#addPermission(android.content.pm.PermissionInfo)"><code>PackageManger.addPermission()</code></a> API (know as 'dynamic permissions'). However, packages can only add permissions to a <a href="http://developer.android.com/reference/android/R.styleable.html#AndroidManifestPermissionTree">permission tree</a> they define (i.e., you cannot add permissions to another app).<br /><br />That mostly explains custom permissions, but what about built-in, system permissions with <code>signature</code> protection level? They work exactly as custom permissions, except that the package that defines them is special. They are defined in the <code>android</code> package, sometimes also referred as 'the framework' or 'the platform'. The core android framework is the set of classes shared by system services, some of them exposed via the public SDK. Those are packaged in JAR files found in <code>/system/framework</code>. Interestingly, those JAR files are not signed: while Android borrows the JAR format to implement code signing, only APK files are signed, not actual JARs. The only APK file in the framework directory is <code>framework-res.apk</code>. As the name implies, it packages framework resources (animation, drawables, layouts, etc.), but no actual code. Most importantly, it defines the <code>android</code> package and system permissions. Thus any app trying to request a system-level signature permission needs to be signed with the same certificate as the framework resource package. Not surprisingly, it is signed by the <code>platform</code> key discussed in the previous section (usually found in <code>build/target/product/security/platform.pk8|.x509.pem</code>). The associated certificate may looks something like this for an AOSP build:<br /><br /><pre>Version: 3 (0x2)<br />Serial Number: 12941516320735154170 (0xb3998086d056cffa)<br />Signature Algorithm: md5WithRSAEncryption<br />Issuer: C=US, ST=California, L=Mountain View, O=Android, OU=Android, <br />CN=Android/emailAddress=android@android.com<br />Validity<br /> Not Before: Apr 15 22:40:50 2008 GMT<br /> Not After : Sep 1 22:40:50 2035 GMT<br />Subject: C=US, ST=California, L=Mountain View, O=Android, OU=Android, <br />CN=Android/emailAddress=android@android.com<br /></pre><h4>Shared user ID</h4></div><div>Android provides an even stronger inter-app trust relationship than using signature permissions: the ability for different apps to run as the same UID, and optionally in the same process. It is usually referred to as '<a href="http://developer.android.com/guide/topics/manifest/manifest-element.html#uid">shared user ID</a>'. This feature is extensively used by core framework services and system applications, and while the Android team does not recommend that third-party application use it, it is available to user applications as well. It is enabled by adding the <code>android:sharedUserId</code> attribute to <code>AndroidManifest.xml</code>'s root element. The 'user ID' specified in the manifest needs to be in Java package format (containing at least one '.') and is used as an identifier, much like package names for applications. If the specified shared UID does not exist it is simply created, but if another package with the same shared UID is already installed, the signing certificate is compared to that of the existing package, and if they do not match, a <code>INSTALL_FAILED_SHARED_USER_INCOMPATIBLE</code> error is returned and installation fails. Adding the <code>sharedUserId</code> to the new version of an already installed app will cause it to change its UID, which would result in losing access to its own files (that was <a href="https://code.google.com/p/android/issues/detail?id=3763">the case</a> in some previous Android versions). Therefore, this is disallowed by the system, and it will reject the update with the <code>INSTALL_FAILED_UID_CHANGED</code> error. In short, if you plan to use shared UID for your apps, you have to design for it from the start, and have them use it since the very first release.<br /><br />A shared UID is a first class object in the system's <code>packages.xml</code> and is treated much like apps are: it has associated signing certificate(s) and permissions. Android has 5 built-in shared UIDs, automatically added when the system is bootstrapped:<br /><ul><li><code>android.uid.system</code> (<a href="http://developer.android.com/reference/android/os/Process.html#SYSTEM_UID"><code>SYSTEM_UID</code></a>, 1000)</li><li><code>android.uid.phone</code> (<a href="http://developer.android.com/reference/android/os/Process.html#PHONE_UID"><code>PHONE_UID</code></a>, 1001)</li><li><code>android.uid.bluetooth</code> (<code>BLUETOOH_UID</code>, 1002)</li><li><code>android.uid.log</code> (<code>LOG_UID</code>, 1007) </li><li><code>android.uid.nfc</code> (<code>NFC_UID</code>, 1027)</li></ul><br />Here's how the <code>system</code> shared UID is defined:<br /><br /><pre><shared-user name="android.uid.system" userId="1000"><br /><sigs count="1"><br /><cert index="4" /><br /></sigs><br /><perms><br /><item name="android.permission.MASTER_CLEAR" /><br /><item name="android.permission.CLEAR_APP_USER_DATA" /><br /><item name="android.permission.MODIFY_NETWORK_ACCOUNTING" /><br />...<br /><shared-user/><br /></pre><br />As you can see, apart from having a bunch of scary permissions (about 60 on a 4.2 device), the declaration is very similar to the <code>package</code> declarations we showed previously. Conversely, packages that are a part of a shared UID, do not have an associated granted permission list. They inherit the permissions of the shared UID, which are a union of the permissions requested by all currently installed packages with the same shared UID. A side effect of this is, that if a package is part of a shared UID, it can access APIs it hasn't explicitly requested permissions for, as long as some package with the same shared UID has already requested them. Permissions are dynamically removed from the <code><shared-user/></code> declaration as packages are installed or uninstalled though, so the set of available permissions is neither guaranteed nor constant. Here's how the declaration of a system app (KeyChain) that runs under a shared ID looks like. It references the shared UID with the <code>sharedUserId</code> attribute and lacks explicit permission declarations:<br /><br /><pre><package name="com.android.keychain" <br /> codePath="/system/app/KeyChain.apk" <br /> nativeLibraryPath="/data/app-lib/KeyChain" <br /> flags="540229" ft="13cd65721a0" <br /> it="13c2d4721f0" ut="13cd65721a0" <br /> version="17" <br /> sharedUserId="1000"><br /><sigs count="1"><br /><cert index="4" /><br /></sigs><br /></package><br /></pre><br />The shared UID is not just a package management construct, it actually maps to a shared Linux UID at runtime as well. Here is an example of two system apps running under the <code>system</code> UID:<br /><br /><pre>system 5901 9852 845708 40972 ffffffff 00000000 S com.android.settings<br />system 6201 9852 824756 22256 ffffffff 00000000 S com.android.keychain<br /></pre><br />The ultimate trust level on Android is, of course, running in the same process. Since apps that are part of the same shared UID already have the same Linux UID and can access the same system resources, this is not a problem. It can be requested by specifying the same process name in the <a href="http://developer.android.com/guide/topics/manifest/application-element.html#proc"><code>process</code></a> attribute of the <code><application/></code> element in the manifest for all apps that need to run in one process. While the obvious result of this is that the apps can share memory and communicate directly instead of using RPC, some system services allow special access to components running in the same process (for example direct access to cached passwords or getting authentication tokens without showing UI prompts). Google apps take advantage of this by requesting to run in the same process as the login service in order to be able to sync data in the background, without user interaction (e.g., Play Services and the Google location service). Naturally, they are signed withe same certificate and part of the <code>com.google.uid.shared</code> shared UID.<br /><h3>Summary</h3></div><div>Android uses the Java JAR format for code signing, and signatures can be added to both application packages (APKs) and system update packages (OTA updates). While JAR signing is based on X.509 certificates and PKI, Android does not use or validate the signer certificates as such. They are treated as binary blobs and an exact byte match is required in order for the system to consider two packages signed by the same signer. Package signature matching is at the heart of the Android security model, used both to guarantee that package updates come from the same origin and when establishing inter-application trust relationships. Inter-app trust relationships can be created either using signature-level permissions (built-in or custom), or by allowing apps to share the same system UID and, optionally, process. </div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-66183400637587512282013-04-23T09:51:00.000-07:002014-02-13T05:04:48.818-08:00Android code signingWe covered a <a href="http://nelenkov.blogspot.jp/2013/02/secure-usb-debugging-in-android-422.html">new security feature</a> introduced in the last Jelly Bean maintenance release in our last post and, before you know it, a <a href="https://android.googlesource.com/platform/build/+/android-4.2.2_r1.2">new tag</a> has already popped up in AOSP. <a href="https://developers.google.com/events/io/">Google I/O</a> is just around the corner, and some interesting bits and pieces are trickling into the AOSP <a href="https://android.googlesource.com/platform/build/+log/master">master branch</a>, so it's probably time for a new post. There are plenty of places where you can get your rumour fix regarding I/O 2013 and it looks like build JDQ39E is going to be <a href="http://www.androidpolice.com/2013/04/17/google-pushes-new-android-4-2-2-code-to-aosp-jdq39e-4-2-2_r1-2-here-is-the-developer-changelog/">somewhat boring</a>, so we will explore something different instead: code signing. This particular aspect of Android has remained virtually unchanged since the first public release, and is so central to the platform, that is pretty much taken for granted. While neither Java code signing, nor its Android implementation are particularly new, some of the finer details are not particularly well-known, so we'll try to shed some more light on those. The first post of the series will concentrate on the signature formats used while the next one will look into how code signing fits into Android's security model.<br />
<h3>
Java code signing</h3>
<div>
As we all know, Android applications are coded (mostly) in Java, and Android application package files (APKs) are just weird-looking JARs, so it pays to understand how JAR signing works first. </div>
<div>
<br /></div>
<div>
First off, a few words about code signing in general. Why would anyone want to sign code? For the usual reasons: integrity and authenticity. Basically, before executing any third-party program you want to make sure that it hasn't been tampered with (integrity) and that it was actually created by the entity that it claims to come from (authenticity). Those features are usually implemented by some digital signature scheme, which guarantees that only the entity owning the signing key can produce a valid code signature. The signature verification process verifies both that the code has not been tampered with and that the signature was produced with the expected key. One problem that code signing doesn't solve directly is whether the code signer (software publisher) can be trusted. The usual way trust is handled is by requiring the code signer to hold a digital certificate, which they attach to the signed code. Verifiers decide whether to trust the certificate either based on some trust model (e.g., PKI or web of trust), or on a case-by-case basis. Another problem that code signing does not solve (or event attempt to) is whether the signed code is safe to run. As we have seen, code that has been signed (or appears to be) by a trusted third party is not necessarily safe (e.g., <a href="http://blogs.technet.com/b/srd/archive/2012/06/06/more-information-about-the-digital-certificates-used-to-sign-the-flame-malware.aspx">Flame</a> or <a href="http://blogs.adobe.com/asset/2012/09/inappropriate-use-of-adobe-code-signing-certificate.html">pwdump7</a>).<br />
<br />
Java's native code packaging format is the <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html">JAR</a> file, which is essentially a ZIP file bundling together code (<code>.class</code> files or <code>classes.dex</code> in Android), some metadata about the package (<code>.MF</code> manifest files in the META-INF/ directory) and, optionally, resources the code uses. The main manifest file (<code>MANIFEST.MF</code>) has entries with the file name and digest value of each file in the archive. The start of the manifest file of a typical APK file is show below (we'll use APKs instead of actual JARs for all examples). <br />
<br />
<pre>Manifest-Version: 1.0
Created-By: 1.0 (Android)
Name: res/drawable-xhdpi/ic_launcher.png
SHA1-Digest: K/0Rd/lt0qSlgDD/9DY7aCNlBvU=
Name: res/menu/main.xml
SHA1-Digest: kG8WDil9ur0f+F2AxgcSSKDhjn0=
Name: ...</pre>
<br />
Java code signing is implemented at the JAR file level by adding another manifest file, called a signature file (<code>.SF</code>) which contains the data to be signed, and a digital signature over it (called a 'signature block file', <code>.RSA,</code> <code>.DSA</code> or <code>.EC</code>). The signature file is very similar to the manifest, and contains the digest of the whole manifest file (<code>SHA1-Digest-Manifest</code>), as well as digests for each of the individual entries in <code>MANIFEST.MF</code>.<br />
<br />
<pre>Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: ZKXxNW/3Rg7JA1r0+RlbJIP6IMA=
Created-By: 1.6.0_45 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: zb0XjEhVBxE0z2ZC+B4OW25WBxo=
Name: res/drawable-xhdpi/ic_launcher.png
SHA1-Digest: jTeE2Y5L3uBdQ2g40PB2n72L3dE=
Name: res/menu/main.xml
SHA1-Digest: kSQDLtTE07cLhTH/cY54UjbbNBo=
Name: ...</pre>
<br />
The digests in the signature file can easily be verified by using the following OpenSSL commands:<br />
<br />
<pre>$ openssl sha1 -binary MANIFEST.MF |openssl base64
zb0XjEhVBxE0z2ZC+B4OW25WBxo=
$ echo -en "Name: res/drawable-xhdpi/ic_launcher.png\r\nSHA1-Digest: \
K/0Rd/lt0qSlgDD/9DY7aCNlBvU=\r\n\r\n"|openssl sha1 -binary |openssl base64
jTeE2Y5L3uBdQ2g40PB2n72L3dE=</pre>
<br />
The first one takes the SHA1 digest of the entire manifest file and encodes it to Base 64 to produce the <code>SHA1-Digest-Manifest</code> value, and the second one simulates how the digest of a single manifest entry is being calculated. The actual digital signature is in binary <a href="http://www.rsa.com/rsalabs/node.asp?id=2129">PKCS#7</a> (or more generally, <a href="http://tools.ietf.org/html/rfc5652">CMS</a>) format and includes the signature value and signing certificate. Signature block files produced using the RSA algorithm are saved with the extension <code>.RSA</code>, those generated with DSA or EC keys with the <code>.DSA</code> or <code>.EC</code> extensions, respectively. Multiple signatures can be performed, resulting in multiple <code>.SF</code> and <code>.RSA/DSA/EC</code> files in the JAR file's <code>META-INF/</code> directory. The CMS format is rather involved, allowing not only for signing, but for encryption as well, both with different algorithms and parameters, and is extensible via custom signed or unsigned attributes. A thorough discussion is beyond the scope of this post, but as used for JAR signing it basically contains the digest algorithm, signing certificate and signature value. Optionally the signed data can be included in the <code>SignedData</code> CMS structure (attached signature), but JAR signatures don't include it (detached signature). Here's how an RSA signature block file looks like when parsed into ASN.1 (certificate info trimmed):<br />
<br />
<pre>$ openssl asn1parse -i -inform DER -in CERT.RSA
0:d=0 hl=4 l= 888 cons: SEQUENCE
4:d=1 hl=2 l= 9 prim: OBJECT :pkcs7-signedData
15:d=1 hl=4 l= 873 cons: cont [ 0 ]
19:d=2 hl=4 l= 869 cons: SEQUENCE
23:d=3 hl=2 l= 1 prim: INTEGER :01
26:d=3 hl=2 l= 11 cons: SET
28:d=4 hl=2 l= 9 cons: SEQUENCE
30:d=5 hl=2 l= 5 prim: OBJECT :sha1
37:d=5 hl=2 l= 0 prim: NULL
39:d=3 hl=2 l= 11 cons: SEQUENCE
41:d=4 hl=2 l= 9 prim: OBJECT :pkcs7-data
52:d=3 hl=4 l= 607 cons: cont [ 0 ]
56:d=4 hl=4 l= 603 cons: SEQUENCE
60:d=5 hl=4 l= 452 cons: SEQUENCE
64:d=6 hl=2 l= 3 cons: cont [ 0 ]
66:d=7 hl=2 l= 1 prim: INTEGER :02
69:d=6 hl=2 l= 1 prim: INTEGER :04
72:d=6 hl=2 l= 13 cons: SEQUENCE
74:d=7 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption
85:d=7 hl=2 l= 0 prim: NULL
87:d=6 hl=2 l= 56 cons: SEQUENCE
89:d=7 hl=2 l= 11 cons: SET
91:d=8 hl=2 l= 9 cons: SEQUENCE
93:d=9 hl=2 l= 3 prim: OBJECT :countryName
98:d=9 hl=2 l= 2 prim: PRINTABLESTRING :JP
...
735:d=5 hl=2 l= 9 cons: SEQUENCE
737:d=6 hl=2 l= 5 prim: OBJECT :sha1
744:d=6 hl=2 l= 0 prim: NULL
746:d=5 hl=2 l= 13 cons: SEQUENCE
748:d=6 hl=2 l= 9 prim: OBJECT :rsaEncryption
759:d=6 hl=2 l= 0 prim: NULL
761:d=5 hl=3 l= 128 prim: OCTET STRING [HEX DUMP]:892744D30DCEDF74933007...</pre>
<br />
If we extract the contents of a JAR file, we can use the OpenSSL <code>smime</code> (CMS is the basis of <a href="http://en.wikipedia.org/wiki/S/MIME">S/MIME</a>) command to verify its signature by specifying the signature file as the content (signed data). It will print the signed data and the verification result:<br />
<br />
<pre>$ openssl smime -verify -in CERT.RSA -inform DER -content CERT.SF signing-cert.pem
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: ZKXxNW/3Rg7JA1r0+RlbJIP6IMA=
Created-By: 1.6.0_43 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: zb0XjEhVBxE0z2ZC+B4OW25WBxo=
Name: res/drawable-xhdpi/ic_launcher.png
SHA1-Digest: jTeE2Y5L3uBdQ2g40PB2n72L3dE=
...
Verification successful</pre>
<br />
The official tools for JAR signing and verification are the <a href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html"><code>jarsigner</code></a> and <a href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html"><code>keytool</code></a> commands from the JDK. Since Java 5.0 <code>jarsigner</code> also <a href="http://docs.oracle.com/javase/1.5.0/docs/guide/security/time-of-signing.html">supports timestamping</a> the signature by a <a href="http://tools.ietf.org/html/rfc3161#section-2">TSA</a>, which could be quite useful when you need to ascertain the time of signing (e.g., before or after the signing certificate expired), but this feature is not widely used. Using the <code>jarsigner</code> command, a JAR file is signed by specifying a keystore file, the alias of the key to use for signing (used as the base name for the signature block file) and, optionally, a signature algorithm. One thing to note is that since Java 7, the default algorithm has changed to <code>SHA256withRSA</code>, so you need to explicitly specify it if you want to use SHA1. Verification is performed in a similar fashion, but the keystore file is used to search for trusted certificates, if specified. (again using an APK file instead of an actual JAR):<br />
<br />
<pre>$ jarsigner -keystore debug.keystore -sigalg SHA1withRSA test.apk androiddebugkey
$ jarsigner -keystore debug.keystore -verify -verbose -certs test.apk
....
smk 965 Mon Apr 08 23:55:34 JST 2013 res/drawable-xxhdpi/ic_launcher.png
X.509, CN=Android Debug, O=Android, C=US (androiddebugkey)
[certificate is valid from 6/18/11 7:31 PM to 6/10/41 7:31 PM]
smk 458072 Tue Apr 09 01:16:18 JST 2013 classes.dex
X.509, CN=Android Debug, O=Android, C=US (androiddebugkey)
[certificate is valid from 6/18/11 7:31 PM to 6/10/41 7:31 PM]
903 Tue Apr 09 01:16:18 JST 2013 META-INF/MANIFEST.MF
956 Tue Apr 09 01:16:18 JST 2013 META-INF/CERT.SF
776 Tue Apr 09 01:16:18 JST 2013 META-INF/CERT.RSA
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.</pre>
<br />
The last command verifies the signature block and signing certificate, ensuring that the signature file has not been tampered with. It then verifies that each digest in the signature file (<code>CERT.SF</code>) matches its corresponding section in the manifest file (<code>MANIFEST.MF</code>). One thing to note is that the number of entries in the signature file does not necessarily have to match those in the manifest file. Files can be added to a signed JAR without invalidating its signature: as long as none of the original files have been changed, verification succeeds. Finally, <code>jarsigner</code> reads each manifest entry and checks that the file digest matches the actual file contents. Optionally, it checks whether the signing certificate is present in the specified key store (if any). As of Java 7 there is a new <code>-strict</code> option that will perform additional certificate validations. Validation errors are treated as warnings and reflected in the exit code of the <code>jarsigner</code> command. As you can see, it prints certificate details for each entry, even though they are the same for all entries. A slightly better way to view signer info when using Java 7 is to specify the <code>-verbose:summary</code> or <code>-verbose:grouped</code>, or alternatively use the <code>keytool</code> command: <br />
<br />
<pre>$ keytool -list -printcert -jarfile test.apk
Signer #1:
Signature:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 4dfc7e9a
Valid from: Sat Jun 18 19:31:54 JST 2011 until: Mon Jun 10 19:31:54 JST 2041
Certificate fingerprints:
MD5: E8:93:6E:43:99:61:C8:37:E1:30:36:14:CF:71:C2:32
SHA1: 08:53:74:41:50:26:07:E7:8F:A5:5F:56:4B:11:62:52:06:54:83:BE
Signature algorithm name: SHA1withRSA
Version: 3</pre>
<br />
Once you know the signature block file name (by listing the archive contents, for example), you can also use OpenSSL in combination with the <code>zip</code> command to easily extract the signing certificate to a file:<br />
<br />
<pre>$ unzip -q -c test.apk META-INF/CERT.RSA|openssl pkcs7 -inform DER -print_certs -out cert.pem</pre>
</div>
<br />
<h3>
Android code signing</h3>
As evident from the examples above, Android code signing is based on Java JAR signing and you can use the regular JDK tools to sign or verify APKs. Besides those, there is an Android specific tool in the AOSP <code>build/</code> directory, aptly named <code>signapk</code>. It performs pretty much the same task as <code>jarsigner</code> in signing mode, but there are also a few notable differences. To start with, while <code>jarsigner</code> requires keys to be stored in a compatible key store file, <code>signapk</code> takes separate signing key (in <a href="http://www.rsa.com/rsalabs/node.asp?id=2130">PKCS#8</a> format) and certificate (in DER format) files as input. While it does appear to have some support for reading DSA keys, it can only produce signatures with the <code>SHA1withRSA</code> mechanism. Raw private keys in PKCS#8 are somewhat hard to come by, but you can easily generate a test key pair and a self-signed certificate using the <code>make_key</code> found in <code>development/tools</code>. If you have existing OpenSSL keys you cannot use them as is however, you will need to convert them using OpenSSL's <code>pkcs8</code> command:<br />
<br />
<pre>echo "keypwd"|openssl pkcs8 -in mykey.pem -topk8 -outform DER -out mykey.pk8 -passout stdin</pre>
<br />
Once you have the needed keys, you can sign an APK like this:<br />
<br />
<pre>$ java -jar signapk.jar cert.cer key.pk8 test.apk test-signed.apk</pre>
<br />
Nothing new so far, except the somewhat exotic (but easily parsable by JCE classes) key format. However, the <code>signapk</code> has an extra 'sign whole file' mode, enabled with the <code>-w</code> option. When in this mode, in addition to signing each individual JAR entry, the tool generates a signature over the whole archive as well. This mode is not supported by <code>jarsigner</code> and is specific to Android. So why sign the whole archive when each of the individual files is already signed? In order to support over the air updates (OTA), naturally :). If you have ever flashed a custom ROM, or been impatient and updated your device manually before it picked up the official update broadcast, you know that OTA packages are ZIP files containing the updated files and scripts to apply them. It turns out, however, that they a lot more like JAR files on the inside. They come with a <code>META-INF/</code> directory, manifests and a signature block, plus a few other extras. One of those is the <code>/META-INF/com/android/otacert</code> file, which contains the update signing certificate (in PEM format). Before booting into recovery to actually apply the update, Android will verify the package signature, then check that the signing certificate is one that is trusted to sign updates. OTA trusted certificates are completely separate from the 'regular' system <a href="http://nelenkov.blogspot.jp/2011/12/ics-trust-store-implementation.html">trust store</a>, and reside in a, you guessed it, a ZIP file, usually stored as <code>/system/etc/security/otacerts.zip</code>. On a production device it will typically contain a single file, likely named <code>releasekey.x509.pem</code>.<br />
<br />
Going back to the original question, if OTA files are JAR files, and JAR files don't support whole-file signatures, where does the signature go? The Android <code>signapk</code> tool slightly abuses the ZIP format by adding a null-terminated string comment in the ZIP comment section, followed by the binary signature block and a 6-byte final record, containing the signature offset and the size of the entire comment section. This makes it easy to verify the package by first reading and verifying the signature block from the end of the file, and only reading the rest of the file (which for a major upgrade might be in the hundreds of MBs) if the signature checks out. If you want to manually verify the package signature with OpenSSL, you can separate the signed data and the signature block with a script like the one below, where the second argument is the signature block file, and the third one is the signed ZIP file (without the comments section) to write:<br />
<br />
<pre>#!/bin/env python
import os
import sys
import struct
file_name = sys.argv[1]
file_size = os.stat(file_name).st_size
f = open(file_name, 'rb')
f.seek(file_size - 6)
footer = f.read(6)
sig_offset = struct.unpack('<H', footer[0:2])
sig_start = file_size - sig_offset[0]
sig_size = sig_offset[0] - 6
f.seek(sig_start)
sig = f.read(sig_size)
f.seek(0)
# 2 bytes comment length + 18 bytes string comment
sd = f.read(file_size - sig_offset[0] - 2 - 18)
f.close()
sf = open(sys.argv[2], 'wb')
sf.write(sig)
sf.close()
zf = open(sys.argv[3], 'wb')
zf.write(sd)
zf.close()</pre>
<h3>
Summary</h3>
<div>
Android relies heavily on the Java JAR format, both for application packages (APKs) and for system updates (OTA packages). APK signing uses a subset of the JAR signing specification as is, while OTA packages use a custom format that generates a signature over the whole file. Standalone package verification can be performed with standard JDK tools or OpenSSL (after some preprocessing). The Android OS and recovery system follow the same verification procedures before installing APKs or applying system updates. In the next article we will explore how the OS uses package signatures and how they fit into Android's security model. </div>
<a href="http://www.paid-to-promote.net/member/signup.php?r=zhan" target="_blank"><img src="http://www.paid-to-promote.net/images/ptp.gif" alt="Get Paid To Promote, Get Paid To Popup, Get Paid Display Banner" width="468" height="60" border="0" longdesc="http://www.paid-to-promote.net/" /></a>
modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-45711811438180323362013-02-24T00:15:00.000-08:002014-02-01T04:52:03.228-08:00Golongan Pengguna Android<span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Satu setengah tahun belakangan ini, sedang booming smartphone berbasis Android. Sebagai sistem operasi open source, Android menarik minat banyak orang, terutama orang-orang yang gemar oprek-oprek.</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Menurut saya, pengguna Android bisa digolongkan menjadi 3:</span><br /><ol style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;"><li style="background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-position: 0% 6px; background-repeat: no-repeat no-repeat; list-style: none; margin-bottom: 3px; padding-left: 14px;">User</li><li style="background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-position: 0% 6px; background-repeat: no-repeat no-repeat; list-style: none; margin-bottom: 3px; padding-left: 14px;">Super User</li><li style="background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-position: 0% 6px; background-repeat: no-repeat no-repeat; list-style: none; margin-bottom: 3px; padding-left: 14px;">Developer</li></ol><strong style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">USER</strong><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Sebagai pengguna smartphone Android, USER hanya sebatas menggunakan handset nya untuk keperluan standard: voice call (call via provider atau via internet), messaging (sms, mms, email, YM, Gtalk, whatsapp), entertaintment (game, music, camera), sosical network (facebook, twitter), office. Kemungkinan terbesar, USER hanya sampai melakukan modding theme pada androidnya.</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">USER memperlakukan Si Robot Hijau layaknya smartphone "biasa" saja. Padahal, kalau boleh saya katakan, Android is beyond smartest smartphone... hehehe</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><strong style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">SUPER USER (SU)</strong><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Pada tahapan ini, SU sudah lebih mendalami system Android. SU mulai mengoprek-oprek Si Robot Hijau Open Source. Mulai dari browsing ke dalam system Android, sampai modding system, tapi masih based on Android.</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Pertama kali yang harus dilakukan untuk masuk kategori SU adalah rooting. Root sama dengan istilah administrator kalau di windows. Dengan rooting ini, si SU bisa mendapatkan previlege root pada ponsel Androidnya. Dengan root, SU bisa membuka folder root dan mem-browsing system android (fyi USER hanya bisa membrowsing SD card saja).</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Hal-hal yang biasanya dilakukan oleh SU:</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><ul style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; list-style: none; margin-left: 10px; padding: 0px; text-align: left;"><li style="background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-position: 0% 6px; background-repeat: no-repeat no-repeat; list-style: none; margin-bottom: 3px; padding-left: 14px;">rooting</li><li style="background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-position: 0% 6px; background-repeat: no-repeat no-repeat; list-style: none; margin-bottom: 3px; padding-left: 14px;">upgrade unofficial firmware</li><li style="background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-position: 0% 6px; background-repeat: no-repeat no-repeat; list-style: none; margin-bottom: 3px; padding-left: 14px;">oprek system: manipulasi memory, partisi, tweak system, dll.</li></ul><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Pada intinya, SU sudah cinta mati sama androidnya, dan berusaha membuat handset androidnya menjadi lebih baik atau sesuai dengan keinginannya.</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><strong style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">DEVELOPER</strong><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Pada tingkatan tertinggi pengguna Android adalah Developer. Menurut pengamatan saya, developer ada 2 macam, yaitu official yang mempunyai garansi dan bekerja sama dengan google, dan unofficial. Biasanya developer unofficial adalah perorangan atau komunitas, dan biasanya tidak bertanggung jawab terhadap device SU yang menggunakan software/firmware nya.</span><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><br style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;" /><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">Salah satu komunitas Android terbesar yang saya ketahui adalah</span><a href="http://forum.xda-developers.com/" style="background-color: #e0e0e0; color: #666699; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">http://forum.xda-developers.com/</a><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">. Ada juga komunitas android indonesia di </span><a href="http://www.android-indonesia.com/" style="background-color: #e0e0e0; color: #666699; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">http://www.android-indonesia.com/</a><span style="background-color: #e0e0e0; color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px; text-align: left;">.</span>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-26803349250476522342013-02-22T10:27:00.000-08:002014-02-01T04:52:03.213-08:00ClockWorkMod atau CWM<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Bagi anda yang hobi custom perangkat android anda. CWM atau clockwork mod tentu sudah tidak asing lagi. Pada artikel tips droid ini, mari kita berbagi bersama mengenal tentang CWM pada android.</span></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><br /><a href="" name="more" style="color: #2b98d4; text-decoration: underline;"></a><span style="font-family: Verdana, sans-serif;">Pada artikel sebelumnya tips droid telah berbagi bersama tentang melakukan custom agar perangkat android anda optimal. Mari kita mulai berbagi tentang CWM.</span><br /><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b><span style="color: red;">Apakah ClockworkMod?</span></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">ClockworkMod Recovery adalah recovery sekunder untuk perangkat Android yang dibuat oleh Koush. Hal ini didasarkan dari citra pemulihan eclair. Fitur termasuk backup Nandroid, adb shell, advance update.zip (ignore asserts and signature checks) , dan file browser untuk memilih update.zip. ClockworkMod </span><span style="font-family: Verdana, sans-serif;">juga dikenal sebagai CWM, clockwork dan CW recovery.</span><br /><span style="font-family: Verdana, sans-serif;"><br /><span style="color: red;"><b>Tentang Android Recovery</b></span></span><br /><span style="font-family: Verdana, sans-serif;">Hampir sebagian besar perangkat android menyertakan konsol pemulihan yang pada dasarnya dalam partisi pada memori internal perangkat dan dapat dipanggil pada saat boot. Pemulihan stock hampir semua perangkat android menyediakan pilihan dasar yang memungkinkan anda untuk mengembalikan pada setting awal pabrik / factory reset namun tidak semua dapat memulihkan sistem operasi pada ROM format zip, oleh karena itu pemulihan custom akan berguna pada saat anda membutuhkan pemulihan sistem operasi tersebut.</span><br /><span style="font-family: Verdana, sans-serif;"><br />Sebuah pemulihan custom pada dasarnya menggantikan pemulihan stock dengan salah satu yang memungkinkan anda melakukan semua yang dapat anda lakukan dengan pemulihan stock, ditambah beberapa fitur lebih banyak pilihan untuk memberi kontrol lebih banyak pada perangkat anda. Dengan pemulihan custom, anda dapat menginstal ROM resmi dan tidak resmi serta pembaruan lainnya termasuk aplikasi, tema, kernel menggunakan file zip, dan masih banyak lagi fitur yang disediakan.</span><br /><span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"><b><span style="color: red;">Pengantar ClockworkMod</span></b></span><br /><span style="font-family: Verdana, sans-serif;">Recovery ClockworkMod adalah salah satu pemulihan yang paling banyak digunakan android custom yang tersedia untuk perangkat android. Ini adalah pemulihan yang dibutuhkan untuk AOKP, AOSP, CM7, CM9, CM10 dan lainnya. ClockworkMod recovery dikembangkan oleh Koushik Dutta (juga dikenal sebagai Koush - seorang developer Android ROM Manager.</span><br /><span style="font-family: Verdana, sans-serif;"><br /></span><br /><span style="font-family: Verdana, sans-serif;"><b><span style="color: red;">Metode Install CWM</span></b></span><br /><span style="font-family: Verdana, sans-serif;">Metode 1: Rom Manager</span><br /><span style="font-family: Verdana, sans-serif;">ROM Manager adalah cara asli dan resmi untuk menginstal clockworkMod recovery dengan file .zip. Unduh "Manajer Rom" dari play store klik gambar di bawah ini.</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://adf.ly/FBnDv" style="color: #2b98d4;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="97" src="http://1.bp.blogspot.com/CTLpQkinZUhIcYPP75Rvm8aAEssnZvQflt6t660Pd6nZK6yRshR0BzTq5IK5DurW8lA=w705" style="border: 6px solid rgb(217, 217, 217);" title=".com/" width="200" /></span></a></div><span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;">Metode 2: Update.zip </span><br /><span style="font-family: Verdana, sans-serif;">Anda dapat menemukan dan download update.zip ini sendiri, letakkan di telepon di / sdcard / dan boot ke recovery. </span><br /><span style="font-family: Verdana, sans-serif;"><br />Metode 3 (beberapa model): Flash</span><br /><span style="font-family: Verdana, sans-serif;">Untuk beberapa model dengan flash atau mengunakan kernel dengan built in Clockwork ROM Kebanyakan dibuat untuk perangkat yang kompatibel termasuk kernel dengan built in CWM Dengan metode ini anda tidak perlu file update.zip atau Manajer Rom lagi.</span><br /><span style="font-family: Verdana, sans-serif;"><b><span style="color: red;"><br /></span></b><b><span style="color: red;">Boot ke ClockworkMod</span></b><br />Sebagai contoh pada perangkat android yang paling banyak digunakan pengguna android yaitu Samsung, anda dapat memasukkan pemulihan dengan menyalakan perangkat Anda dan pada saat menyalakan perangkat android tekan tombol 'Volume Down' atau tombol 'Volume-Up' dan tombol 'Power' untuk menghidupkan perangkat, hal ini tergantung pada perangkat yang anda gunakan, terkadang tiap perangkat berbeda cara pemanggilan recovery tersebut, terkadang ada yang harus menyertakan dengan menekan tombol 'Home'. Untuk melihat tutorial install dan boot ke CWM, anda dapat langsung klik pada situs tertaut di bawah ini</span><br /><div style="text-align: center;"><span style="font-family: Verdana, sans-serif;"><a href="http://adf.ly/F9KPi" style="color: #2b98d4;"><b><span style="font-size: medium;">Install dan Boot CWM</span></b></a></span></div><span style="font-family: Verdana, sans-serif;"><br /><b><span style="color: red;">Fitur CWM</span></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"><a href="http://4.bp.blogspot.com/-kDRcO7rr9QA/UK9uMhSsm6I/AAAAAAAADJE/OxCdb5GCgvE/s1600/cwm.gif" imageanchor="1" style="color: #2b98d4; margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"></span></a></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"><a href="http://2.bp.blogspot.com/-JaWTwFXlNe4/UK9-j1M9cxI/AAAAAAAADKI/-on9WPhTohQ/s1600/clockworkmod.jpg" imageanchor="1" style="color: #2b98d4; margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="161" src="http://2.bp.blogspot.com/-JaWTwFXlNe4/UK9-j1M9cxI/AAAAAAAADKI/-on9WPhTohQ/s320/clockworkmod.jpg" style="border: 6px solid rgb(217, 217, 217);" title="clockworkmod" width="320" /></span></a></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b>1.Reboot system now</b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Reboot / restart perangkat android anda.</span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b><br /></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b>2.Apply update from sdcard</b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Hal ini dapat digunakan untuk instalasi dari setiap update resmi atau tidak resmi, ROM, kernel, tema, dll yang diinstal dalam format zip dari recovery, update.zip. File zip telah ditempatkan pada SD card (yaitu tidak dalam sub-folder). Setelah memilih opsi ini akan memunculkan konfirmasi untuk memastikan bahwa pilihan anda benar.</span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b><br /></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b>3.Wipe data/factory reset</b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Pilihan ini menghapus semua data pengguna pada perangkat serta cache. Memilih opsi ini sama seperti anda melakukan factory reset dari menu setting > privacy > factory reset. Semua aplikasi, setting dan data pada perangkat akan ter-reset seperti ketika anda pertama kali install ROM (untuk custom ROM) atau seperti ketika anda membeli perangkat baru (untuk stock ROM). Opsi ini tidak akan reset memory external anda.</span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b><br /></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b>4.Wipe cache partition</b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Membersihkan cache partisi pada perangkat untuk menghapus semua data yang terkumpul di sana selama penggunaan / data user. Hal ini sering digunakan sebelum menginstal ROM, aplikasi baru, kernel atau mod serupa melalui recovery.</span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b><br /></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: purple; font-family: Verdana, sans-serif;"><b>5.Install zip from sdcard</b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Opsi ini memungkinkan anda untuk install file dengan format zip, namun tidak harus bernama update.zip dan tidak harus terletak pada root sd card. Setelah anda pilih opsi ini maka akan muncul beberapa opsi lagi, untuk penjelasan lanjut akan tips droid jelaskan pada gambar terkait di bawah ini.</span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"><a href="http://2.bp.blogspot.com/-HAazXbLeXEY/UK9uwlwsiNI/AAAAAAAADJM/3zNePIDQuos/s1600/cwm.gif" imageanchor="1" style="color: #2b98d4; margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="113" src="http://2.bp.blogspot.com/-HAazXbLeXEY/UK9uwlwsiNI/AAAAAAAADJM/3zNePIDQuos/s320/cwm.gif" style="border: 6px solid rgb(217, 217, 217);" title="cwm" width="320" /></span></a></div><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">5.1.Apply sdcard update.zip</span></b></div><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;">Ini pada dasarnya sama dengan 'apply update from sdcard' pilihan menu utama. </div></span></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;"><b>5.2.Choose zip from sdcard</b></div></span><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;">Memungkinkan anda menginstal file zip (dengan nama apapun) dari setiap lokasi pada kartu SD Anda. File bisa untuk ROM, kernel, aplikasi, tema atau mod asalkan itu dalam flashable reocvery format zip. Ini adalah pilihan yang paling banyak digunakan untuk memasang ROM yang telah Anda download dan disalin ke kartu SD Anda. </div></span></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;"><b>5.3.Toggle signature verification</b></div></span><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;">Ternyata verifikasi tanda dan mematikan. Ketika verifikasi tanda aktif, anda tidak akan dapat menginstal custom ROM yang belum ditandai oleh para pengembang (custom ROM yang tidak ditandai). Mematikan itu melompat cek verifikasi tanda dan hasil dengan instalasi. </div></span></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;"><b>5.4.Toggle script asserts</b></div></span><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;">Jarang digunakan pilihan ini oleh sebagian besar pengguna recovery. Ini hanya mengubah skrip untuk menegaskan script tersebut akan aktif atau nonaktif. Jika anda tidak tahu tentang ini (tips droid tidak melakukan test pada opsi ini), yang terbaik adalah tidak untuk mengubah pilihan ini. </div></span></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;"><b>5.5.+++++Go Back+++++</b></div></span><span style="font-family: Verdana, sans-serif;"><div style="text-align: justify;">Membawa Anda kembali ke menu utama.</div></span></blockquote><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px;"><span style="font-family: Verdana, sans-serif;"><b><span style="color: purple;">6.Backup and Restore </span></b></span></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px;"><span style="font-family: Verdana, sans-serif;">Tidak perlu diragukan lagi, opsi ini merupakan salah satu fitur yang paling penting yang disediakan oleh custom recovery, fitur backup dan restore juga dikenal sebagai cadangan Nandroid yang memungkinkan Anda untuk mengambil data dan file dari seluruh memori internal telepon anda termasuk semua partisi, dan simpan di kartu SD. Ketika anda pilih opsi ini, maka akan muncul beberapa opsi yang akan tips droid jelaskan pada gambar di bawah ini.</span></div><br style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px;" /><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"><a href="http://4.bp.blogspot.com/-AZYCLgtt8DI/UK9u_GuL4NI/AAAAAAAADJU/ss-8lpCeKlA/s1600/cwm.gif" imageanchor="1" style="color: #2b98d4; margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="130" src="http://4.bp.blogspot.com/-AZYCLgtt8DI/UK9u_GuL4NI/AAAAAAAADJU/ss-8lpCeKlA/s320/cwm.gif" style="border: 6px solid rgb(217, 217, 217);" title="cwm" width="320" /></span></a></div><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"></div><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">6.1.Backup Data data + dbdata + cache</span></b></div><div style="text-align: justify;"><span style="font-family: Verdana, sans-serif;">Membawa backup Nandroid, seperti dijelaskan di atas, baik data, dbdata dan cache.<span style="text-align: center;"> </span></span></div></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><b><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">6.2.Restore Data</span></b></div></b><div style="text-align: justify;"><span style="font-family: Verdana, sans-serif;">Memungkinkan anda memulihkan cadangan diambil sebelumnya. Ketika anda memilih opsi ini, akan menyajikan anda dengan daftar backup yang ada dari kartu SD yang dapat anda pilih dari untuk restorasi.<span style="text-align: center;"> </span></span></div></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><b><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">6.3.Backup ALL</span></b></div></b><div style="text-align: justify;"><span style="font-family: Verdana, sans-serif;">Hampir sama seperti backup data, namun opsi ini akan melakukan backup secara keseluruhan.<span style="text-align: center;"> </span></span></div></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><b><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">6.4.Restore ALL (Be careful!)</span></b></div></b><div style="text-align: justify;"><span style="font-family: Verdana, sans-serif;">Memulihkan data secara keseluruhan, opsi ini harap anda perhatikan secara lebih hati-hati dalam melakukan pemulihan.<span style="text-align: center;"> </span></span></div></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><b><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">6.4.1.Advance Restore</span></b></div></b><div style="text-align: justify;"><span style="font-family: Verdana, sans-serif;">Tergantung dari CWM baik versi maupun perangkat. Biasa pilihan ini muncul pada '<b>advance restore</b>', namun terkadang muncul pada '<b>restore all</b>'. Pilihan ini mirip dengan pilihan Restore tetapi sekali cadangan telah dipilih untuk dipulihkan, pilihan ini memungkinkan anda untuk memilih apa bagian itu untuk mengembalikan. Anda dapat memilih untuk mengembalikan boot, sistem, data, cache dan sd-ext partisi.<span style="text-align: center;"> </span></span></div></blockquote><blockquote class="tr_bq" style="background-color: white; border: 1px dotted rgb(238, 238, 238); font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; font-style: italic; line-height: 18px; margin: 4px; padding: 2px;"><b><div style="text-align: justify;"><b><span style="font-family: Verdana, sans-serif;">6.5.+++++Go Back+++++</span></b></div></b><div style="text-align: justify;"><span style="font-family: Verdana, sans-serif;">Membawa Anda kembali ke menu utama.</span></div></blockquote><span style="background-color: white; font-family: Verdana, sans-serif; font-size: 13px; line-height: 18px;"><div style="text-align: justify;"><b><span style="color: purple;">7.Mounts and Storage</span></b></div><div style="text-align: justify;">Memungkinkan anda untuk melakukan tugas pemeliharaan pada semua partisi internal dan eksternal dari perangkat android anda. Setelah anda pilih opsi ini maka anda kembali akan dihadapkan beberapa pilihan lagi. Pilihan tersebut perhatikan gambar di bawah ini.</div></span><br style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px;" /><div class="separator" style="background-color: white; clear: both; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: center;"><a href="http://2.bp.blogspot.com/-Ou3Adr2Y2Es/UK9vS_hIJNI/AAAAAAAADJc/LV736J_2wmk/s1600/cwm.gif" imageanchor="1" style="color: #2b98d4; margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="211" src="http://2.bp.blogspot.com/-Ou3Adr2Y2Es/UK9vS_hIJNI/AAAAAAAADJc/LV736J_2wmk/s320/cwm.gif" style="border: 6px solid rgb(217, 217, 217);" title="cwm" width="320" /></span></a></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><blockquote class="tr_bq" style="border: 1px dotted rgb(238, 238, 238); font-style: italic; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><b>7.1.Mount/unmount /system, /data, /cache, /sdcard or /sd-ext</b>Opsi ini memungkinkan anda beralih antara pemasangan atau melepas partisi ini tersebut sesuai pilihan anda. Sebagian besar pengguna tidak perlu mengubah pilihan ini. </span></blockquote><blockquote class="tr_bq" style="border: 1px dotted rgb(238, 238, 238); font-style: italic; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><b>7.2.Format boot, system, data, cache, sdcard or sd-ext</b>Ini memungkinkan anda langsung memformat salah satu partisi. Berhati-hatilah dengan pilihan ini jika anda melakukan format pada salah satu partisi akan mengakibatkan kehilangan semua data pada perangkat android anda, terutama boot dan partisi sistem. Memformat partisi sistem akan menghapus ROM anda dan meninggalkan ponsel anda tanpa sistem operasi dan jika anda gagal partisi boot mungkin akan mengakibatkan brick pada perangkat anda kecuali anda mengembalikan atau flash ulang sebelum reboot perangkat anda. </span></blockquote><blockquote class="tr_bq" style="border: 1px dotted rgb(238, 238, 238); font-style: italic; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><b>7.3.Mount USB storage</b>Memungkinkan anda mengaktifkan USB mode penyimpan massal untuk kartu SD anda dari pemulihan sehingga anda dapat terhubung ke komputer anda melalui USB dan mentransfer file ke / dari itu tanpa harus meninggalkan pemulihan. </span></blockquote><blockquote class="tr_bq" style="border: 1px dotted rgb(238, 238, 238); font-style: italic; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><b>7.4.+++++Go Back+++++</b>Membawa Anda kembali ke menu utama.</span></blockquote></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><div><span style="color: purple; font-family: Verdana, sans-serif;"><b>8.Advanced</b></span></div><div><span style="font-family: Verdana, sans-serif;">Bagian ini berisi beberapa pilihan sebagian besar pengguna tidak akan membutuhkan, meskipun ini sebenarnya sering dan cukup berguna, terutama wipe Dalvik cache, yang diperlukan sebelum instalasi pada sebagian ROM.</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-ygl5ZamrwqI/UK-GSnZ1fZI/AAAAAAAADK0/6JyzETWsdIw/s1600/cwm.gif" imageanchor="1" style="color: #2b98d4; margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="161" src="http://3.bp.blogspot.com/-ygl5ZamrwqI/UK-GSnZ1fZI/AAAAAAAADK0/6JyzETWsdIw/s320/cwm.gif" style="border: 6px solid rgb(217, 217, 217);" title="cwm" width="320" /></span></a></div><div><blockquote class="tr_bq" style="border: 1px dotted rgb(238, 238, 238); font-style: italic; margin: 4px; padding: 2px;"><span style="font-family: Verdana, sans-serif;"><b>8.1.Reboot Recovery</b>Memungkinkan anda secara langsung dan cepat reboot dari recovery segera kembali ke recovery lagi. Ini adalah pilihan berguna untuk beberapa back-to-back instalasi yang membutuhkan perangkat untuk setidaknya satu kali booting antara mereka.<br /><b>8.2.Wipe Dalvik Cache</b>Memungkinkan anda untuk menghapus cache untuk mesin virtual Dalvik (custom-built virtual Java machine untuk Android). Ini diperlukan sebelum instalasi ROM sebagian dan pada kesempatan lain juga, untuk memperbaiki beberapa masalah.<br /><b>8.3.Wipe Battery Stats</b>Menyeka statistik penggunaan baterai disimpan dan efektif recalibrates baterai. Berguna dalam berbagai skenario saat Android tidak menunjukkan tingkat baterai yang benar.<br /><b>8.4.Report Error</b>Dalam kasus kesalahan, fitur ini dapat digunakan untuk menyimpan log sehingga anda dapat melakukan koreksi ketika terjadi suatu kesalahan pada operasi pemulihan ClockworkMod pada kartu SD yang nanti dapat laporan dari android menggunakan Manajer ROM.<br /><b>8.5.Key Test</b>Memungkinkan anda menekan salah satu tombol perangkat keras untuk melihat apakah mereka (perangkat keras) benar berfungsi, dan untuk melihat kode kunci mereka (perangkat keras).<br /><b>8.6.Partition SD Card</b>Opsi ini memberikan anda sebuah cara untuk partisi kartu SD Anda dengan benar untuk digunakan dengan ROM yang mendukung data2ext (sangat berguna untuk perangkat yang memiliki memori internal rendah yang memungkinkan partisi pada kartu SD untuk digunakan sebagai internal penyimpanan data yaitu sebagai partisi / data). Setelah opsi ini dipilih, Anda akan diberikan pilihan untuk memilih ukuran untuk partisi / sd-ext serta partisi opsional / swap pada kartu SD, dan kemudian akan secara otomatis memformat untuk anda, meninggalkan ruang yang tersisa untuk penggunaan normal kartu SD. Pilihan ini akan menghapus semua data dari kartu SD Anda jadi gunakan dengan hati-hati!<br /><b>8.7.Fix Permissions</b>Perbaikan izin file untuk partisi memori internal kembali ke default. Hal ini sangat berguna sebagai memperbaiki beberapa kesalahan dan force close yang mulai muncul setelah aplikasi yang diinstal dan memperbaiki akses yang mengacaukan hak akses file penting.<br /><b>8.8.+++++Go Back+++++</b>Membawa Anda kembali ke menu utama.</span></blockquote></div><div><span style="color: purple; font-family: Verdana, sans-serif;"><b>9.Power off</b></span></div><div><span style="font-family: Verdana, sans-serif;">Mematikan perangkat android anda.</span></div><div><span style="font-family: Verdana, sans-serif;"><br /></span></div><div><b><span style="color: purple; font-family: Verdana, sans-serif;">10.+++++Go Back+++++</span></b></div><span style="font-family: Verdana, sans-serif;">Membawa Anda kembali ke menu utama.</span></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="color: red; font-family: Verdana, sans-serif;"><b>Beberapa yang perlu kita perhatikan sebelum melakukan install dari CWM:</b></span></div><div style="background-color: white; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 13px; line-height: 18px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><div>•Periksa baterai, jangan terlalu rendah karena ketika anda melakukan flash dan baterai anda habis akan menyebabkan brick pada perangkat anda.</div><div>•Terkadang beberapa perangkat memerlukan unlocking bootloader terlebih dahulu sebelum melakukan instalasi (Stock Android Devices Only).</div><div>•Device anda sudah dalam posisi rooting.</div><div>•Jangan lupa untuk tetap melakukan backup sebelum anda memulai melakukan mod pada perangkat android anda.</div></span></div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-15911966310149962972013-02-22T10:24:00.000-08:002014-02-01T04:52:03.209-08:00Odexed dan Deodexed<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><strong>Apakah file ODEX itu?</strong></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Dalam file sisten Android, aplikasi berbentuk paket dengan extensi APK. Paket aplikasi atau APK ini mempunyai file ODEX yang fungsi sebenarnya adalah untuk menghemat ruang penyimpanan. File ODEX ini sebenarnya hanya koleksi dari bagian dari aplikasi yang di optimalkan sebelum proses booting. Dengan itu, adanya file ODEX akan mempercepat proses BOOT karena meload bagian dari aplikasi2 yang ada. Di sisi lain, adanya ODEX mempersulit proses hacking terhadap APK, karena beberapa bagian dari APK telah di extract dan berada di lokasi yang lain sebelum di eksekusi.</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><strong>Apakah file DEODEX itu?</strong></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Proses Deodexing secara singkat adalah sebuah proses <em>packing</em> kembali APK dengan ODEX dengan cara tertentu. Proses <em>packing</em> ini akan menjadi file dengan format CLASSES.DEX. Dengan melakukan DeOdexing, semua paket dari APK yang sebelumnya terpisah di satukan kembali di satu file APK, sehingga menghilangkan kecemasan bahwa APK yang dimodifikasi akan konflik dengan beberapa file ODEX.</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Dengan kata laen, ROM yang telah DeODEXed, memiliki paket aplikasi yang telah di jadikan satu kembali dalam satu file APK, sehingga mengijinkan modifikasi pada file APK seperti perubahan THEMA. Karena tidak ada kode/bagian paket aplikasi yang lokasinya berbeda maka integritas paket tetap terjaga.</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><strong>Bagaimana ini bisa bekerja?</strong></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Sistem Operasi Android menggunakan virtual mesin Java yang dinamakan Dalvik Virtual Machine.</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">File Deodex atau *.dex memiliki cache yang digunakan oleh Dalvik ini tersimpan di dalam paket APK. Sedangkan *.odex yang merupakan optimasi *.dex yang sama di simpan di folder yang sama dengan APK, dengan nama sama, akan tetapi berbeda extensi. Android memakai teknik ini di semua sistem aplikasinya</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Saat sistem Android boot, Dalvik Virtual Machine meload file2 *.odex, mengizinkan sistem operasi Android untuk mempelajari lebih lanjut aplikasi apa saja yang nantinya akan di load, sehingga akan mempercepat proses BOOT/</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Dengan melakukan proses DeOdex, developer sebenarnya menaruh file .odex ke paket APK yang bersangkutan. Karena semua kode sekarang telah berada di dalam paket APK itu sendiri, sangat di mungkinkan untuk memodifikasi paket aplikasi APK tanpa mengalami konflik dengan eksekusi di lingkungan Sistem Operasi Android.</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><strong>Keuntungan dan Kelemahan.</strong></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Keuntungan adanya deOdex adalah lebih ke kemungkinan modifikasi. Yang biasanya di gunakan pada custom ROM dan pemberian THEMA. Developer yang mengembangkan custom ROM biasanya melakukan proses deodex terlebih dahulu, karena dengan deOdex, dia bisa merubah banyak paket APK dengan tetap bisa melakukan perubahan THEMA.</div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></div><div style="background-color: white; border: 0px; color: #222222; font-family: Arial, Tahoma; font-size: 14px; line-height: 21.59375px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Disisi lain, karena file .ODEX sebenarnya di tujukan untuk mempercepat pembangunan Dalvik Cache, menghilangkannya akan membuat waktu BOOT lebih lama. Akan tetapi hal ini benar untuk proses pertama BOOT, karena cache DALVIK saat pertama masih kosong, akan tetapi cache ini akan otomatis terisi dengan seiring waktu aplikasi2 di jalankan. Proses boot yang lama mungkin kembali terjadi jika, cache DALVIK terhapus karena alasan tertentu.</div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-72137548054307387462013-02-22T10:22:00.000-08:002014-02-01T04:52:03.240-08:00Stock ROM dan Custom ROM<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">Ada beberapa term yang membingungkan bagi pemula-pemula yang ingin mengembangkan / mengkostumisasi OS di ponsel Android mereka. Term itu antara lain ROM, Stock ROM, dan Custom ROM. Penjelasan tentang pengertian dan fungsi yang berhubungan dengan term itu kira-kira seperti ini…</div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-size: medium; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Vibur, sans-serif; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">ROM (Read Only Memory)</span></span></div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">ROM, <em style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">also known as </em>Read Only Memory adalah bagian memori ponsel yang menyimpan file-file system dari perangkat kita. File-file inilah yang membentuk Sistem Operasi, baik itu di Windows Mobile OS, Android, Symbian, iOS, dan lainnya. Setiap perangkat elektronik pasti memiliki ROM ini untuk menyimpan fungsi-fungsi program dasar yang bisa dijalankan perangkat elektronik tersebut. Misalnya saja, televisi (TV) yang kita miliki pun pasti memiliki ROM untuk menyimpan fitur-fitur yang diberikannya. Pengaturan Channel, Menu, Volume, dsb dst. <img alt=":-)" class="wp-smiley" src="http://neng-ocha.com/wp-includes/images/smilies/1.gif" style="background-color: transparent; border: 0px; height: auto; margin: 0px !important; max-height: 13px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline; width: auto;" /> Dan sistem yang tersimpan di ROM inilah yang bisa digunakan untuk membuat peralatan kita menjadi “Out of The Box”. Tanpa ROM, peralatan elektronnik tidak akan pernah ada.</div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-size: medium; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Vibur, sans-serif; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Stock ROM</span></span></div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">ROM yang ada sejak membuka perangkat elektronik dari pembungkusnya sesaat setelah dibeli dari toko/distributor adalah Stock ROM, bisa disebut juga ROM orisinil. Dan ROM ini adalah official software yang diberikan Pabrikan perangkat elektronik yang disebut OEM (<em style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Original Equipment Manufacture</em>).</div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">Apakah Stock ROM ini bisa dikostumisasi? Tentu saja. ROM asli dari beberapa OS mobile seperti Windows Mobile Phone, Android, Symbian bisa dikustomisasi sesuai keinginan si developer custom tersebut.</div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-size: medium; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Vibur, sans-serif; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Custom ROM</span></span></div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">Seperti yang sudah dijelaskan di paragraf sebelumnya, Custom ROM adalah Stock ROM yang sudah dikustomisasi atau dikembangkan sesuai keinginan pengguna (dalam hal ini bisa disebut <em style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">custom developer</em>). Ditambahkan aplikasi, pengembangan fitur dan menu-menu yang ada, menghilangkan fitur dan aplikasi yang tidak dibutuhkan, dan sebagainya. ROM yang dikustomisasi ini sendiri bisa jadi hanya minor developed atau tidak banyak penambahan dan pengurangan dari Stock ROM, atau malah mengubah keseluruhan tampilan Stock ROM dan menambahkan driver-driver yang bisa menaikkan kinerja OS.</div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-size: medium; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Vibur, sans-serif; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Mengapa kita butuh Custom ROM?</span></span></div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">Personalisasi. Itulah yang biasanya kita inginkan untuk hadir di gadget yang kita gunakan sehari-hari. Sesuai dengan kepribadian, kebiasaan, dan ciri khas kita <img alt=":-)" class="wp-smiley" src="http://neng-ocha.com/wp-includes/images/smilies/1.gif" style="background-color: transparent; border: 0px; height: auto; margin: 0px !important; max-height: 13px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline; width: auto;" /> Ini adalah salah satu alasan utama mengapa Custom ROM dibuat. Stock ROM, bagaimanapun ia dibuat, pasti akan memiliki banyak sekali aplikasi tidak penting. Tidak hanya aplikasi, termasuk juga file-file, gambar, dan pengaturan yang sudah disediakan oleh pabrikan. Tapi dari semua bagian yang ada dalam Stock ROM tersebut, tidak semuanya berguna bagi kita, dan pasti akan memakan space yang besar di memori internal. Didalam Stock ROM pun, bagaimana lengkapnya juga, pasti masih ada<em style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"> bug</em> atau “hama”. Untuk menghindari masalah ini, kita bisa mengkostumisasi sendiri dengan menambahkan aplikasi yang kita perlukan, menambahkan menu pengaturan, menghilangkan sampah dan hama, dan meraih Top Notch atau Skor Tertinggi atas kemudahan penggunaan dan peralatan <em style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">full-costumed</em>.</div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-size: medium; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Vibur, sans-serif; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Bagaimana dengan Garansi Pabrik?</span></span></div><div style="background-color: white; border: 0px; color: #232527; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">Ini adalah keputusan yang jadi resiko kita, jika kita ingin mengkostumisasi Stock ROM. Garansi Pabrik akan hilang. Namun itu terjadi HANYA JIKA perangkat anda berhenti bekerja normal ketika menggunakan Custom ROM dan anda membawanya ke dealer pabrik terdekat. Maka dari itu, sebelum membawanya ke dealer untuk mengajukan klaim garansi, sebaiknya anda mengembalikan ke Stock ROM. Hihihi.. <img alt=";))" class="wp-smiley" src="http://neng-ocha.com/wp-includes/images/smilies/71.gif" style="background-color: transparent; border: 0px; height: auto; margin: 0px !important; max-height: 13px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline; width: auto;" /></div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-44042334952681543412013-02-22T10:20:00.000-08:002014-02-01T04:52:03.226-08:00Membuat Custom ROM dengan Android Kitchen (bag 4)<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">17. Build ROM adalah proses tahapan akhir proses dari kitchen ini, untuk itu ikutilah langkah-langkah dari gambar yang di tampilkan di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen40" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_40.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Pilih menu 99-Build ROM from working folder.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /><img alt="kitchen41" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_41.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Lalu tekan Enter dan Enter lagi.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /><img alt="kitchen42" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_42.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Proses sedang berlangsung; Zipaligning apps.<br style="margin: 0px; padding: 0px;" /><img alt="kitchen43" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_43.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Ini adalah proses untuk konfirmasi penggunaan updater-script dan update-binary, tekan Enter.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen44" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_44.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Proses berikutnya untuk signing ROM...tekan Enter.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen45" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_45.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Proses akhir adalah konfirmasi untuk merubah nama file output ....tekan Enter, kita tidak merubah nama file output zip nya ROM.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen46" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_46.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Proses Build ROM selesai!!!.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen47" border="0" height="243" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_47.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="569" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> file zip ROM terdapat dalam folder ...\Kitchen\OUTPUT_ZIP. Di bawah ini adalah gambar ekstraksi dari file zip tersebut di atas:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen48" border="0" height="349" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_48.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="569" /> </div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen49" border="0" height="678" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_49.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="569" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen50" border="0" height="258" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_50.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="569" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><br /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">Sekarang kita sudah berhasil mendapatkan custom rom, silahkan di flash melalui cwm recovery. Jangan lupa untuk melakukan proses wipe data, cache, dan dalvik.</div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-34082714732871214392013-02-22T10:18:00.000-08:002014-02-01T04:52:03.217-08:00Membuat Custom ROM dengan Android Kitchen (bag 3)<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">12. Langkah selanjutnya adalah melakukan proses <strong style="margin: 0px; padding: 0px;">deodexed</strong>. Untuk melakukan proses ini maka kita pilih menu <strong style="margin: 0px; padding: 0px;">11-De-odex file in your ROM</strong>(lihat gambar di bawah ini).</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen28" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_28.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Tekan Enter, lalu selanjutnya pilih<strong style="margin: 0px; padding: 0px;"> b</strong>, tekan Enter, dan tekan lagi Enter (lihat gambar di bawah ini):</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen29" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_29.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Berikutnya kita tunggu sampai proses ini selesai.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen30" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_30.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Proses deodex selesai, selanjutnya tekan Enter untuk kembali ke menu ADVANCED OPTIONS.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">13. Langkah selanjutnya adalah untuk mengaktifkan fitur init.d, lihat gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen_31" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_31.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen32" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_32.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen33" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_33.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Kita pilih menu <strong style="margin: 0px; padding: 0px;">14-Add /etc/init.d scripts support (busybox run-parts)</strong>, tekan Enter, selanjutnya tampil jendela konfirmasi untuk proses ini, kita tekan aja Enter, maka kitchen akan memprosesnya, setelah selesai kita tekan lagi Enter untuk kembali ke menu ADVANCED OPTIONS dan kembali ke Menu Utama dengan menekan tombol 0 dan Enter.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">14. Dari Menu Utama sekarang mari kita lihat informasi sementara dari ROM ini dengan memilih menu <strong style="margin: 0px; padding: 0px;">8-Show working folder information</strong>. Hasilnya seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen34" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_34.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /> <br style="margin: 0px; padding: 0px;" /> Dari informasi ROM di atas kita dapat mengganti ROM Name dengan nama yang lain, misalkan<strong style="margin: 0px; padding: 0px;"> "PnP v1.0 XXDMA6"</strong>, berikutnya terlihat ROM saat di flash nanti tidak melakukan wipe data, dan <strong style="margin: 0px; padding: 0px;">modem.bin</strong> belum ada di working folder. Ok, langkah berikutnya nanti, kita akan mengganti nama rom dan menempatkan modem.bin dalam working folder sebelum kita melakukan proses build dari rom ini di android kitchen.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Kembali ke Menu Utama kita tekan Enter.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">15. Langkah selanjutnya adalah kita copy-kan file <strong style="margin: 0px; padding: 0px;">modem.bin</strong> yang berada di folder original_update ke folder<strong style="margin: 0px; padding: 0px;">WORKING_020413_143332</strong> (lihat gambar di bawah ini).</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen35" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_35.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="670" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> setelah dicopykan tutup saja jendela tersebut.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> 16. Berikutnya kita akan mengganti nama dari ROM ini. Untuk melakukan ini kita pilih menu 7-Change of ROM name (lihat gambar di bawah ini).</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen36" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_36.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /> </div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen37" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_37.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen38" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_38.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Selanjutnya tekan Enter untuk kembali ke Menu Utama, dan sekarang mari kita lihat informasi ROM ini dengan memilih menu <strong style="margin: 0px; padding: 0px;">8-Show working folder information</strong>. Hasilnya seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen39" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_39.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /> <br style="margin: 0px; padding: 0px;" /> Ok...sekarang dari gambar di atas sudah cukup untuk melakukan proses tahapan akhir, yaitu melakukan proses <strong style="margin: 0px; padding: 0px;">build ROM from woking folder</strong>. Untuk itu kita tekan Enter untuk kembali ke Menu Utama. Sebelum kita melakukan proses build ini lakukan terlebih dulu untuk menghapus folder<strong style="margin: 0px; padding: 0px;"> app</strong> yang terletak dalam:<br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\common\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\GLB\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\SMA\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\THL\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\XEV\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\XME\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\XSE\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\XTC\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\XTE\system</strong><br style="margin: 0px; padding: 0px;" /><strong style="margin: 0px; padding: 0px;">...\Kitchen\WORKING_020413_143332\system\csc\XXV\system</strong></div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-83702162720925382562013-02-22T10:17:00.000-08:002014-02-01T04:52:03.248-08:00Membuat Custom ROM dengan Android Kitchen (bag 2)<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen2" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_2.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /> </div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">7. Langkah selanjutnya adalah menambahkan root permissions yang dilakukan pada <em style="font-weight: bold; margin: 0px; padding: 0px;">boot.img</em>. Untuk melakukan hal tersebut maka kita pilih Menu<strong style="margin: 0px; padding: 0px;"> 2-Add root permissions</strong>. Proses nya seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen11" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_11.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> di sini kita gunakan SuperSU dari Chainfire. Pilih c lalu tekan tombol Enter, maka proses insecure kernel (rooting) untuk kernel boot.img dilakukan. Setelah selesai kita tekan tombol Enter untuk kembali ke Menu Utama.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen12" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_12.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><br /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">8. Proses selanjutnya adalah menambahkan utility busybox. Untuk itu di Menu Utama kita pilih<strong style="margin: 0px; padding: 0px;"> 3-Add BusyBox</strong>, lalu tekan Enter. Hasil proses langkah ini seperti tampak pada gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen13" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_13.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Berikutnya tekan Enter untuk kembali ke Menu Utama.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">9. Langkah berikutnya adalah untuk menonaktifkan sound saat booting(bootanimation). Untuk itu kita pilih menu <strong style="margin: 0px; padding: 0px;">4-Disable boot sound screens</strong>, lalu tekan Enter lagi, seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen14" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_14.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /> <br style="margin: 0px; padding: 0px;" /> Tekan Enter kembali ke Menu Utama.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> 10. Langkah berikutnya adalah menambahkan data CSC pada system. Untuk hal tersebut kita pilih menu<strong style="margin: 0px; padding: 0px;"> 0-ADVANCED OPTIONS</strong>. Selanjutnya dari menu ADVANCED OPTIONS kita pilih menu<strong style="margin: 0px; padding: 0px;"> 18-Plugin scripts</strong>. Berikutnya di menu Plugin script2 kita pilih menu<strong style="margin: 0px; padding: 0px;"> (3) Extract_SGS2_CSC_from_cache.img</strong>, tampak seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen15" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_15.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen16" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_16.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen17" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_17.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Tekan tombol Enter untuk memprosesnya.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen18" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_18.jpg" style="border: 0px none; margin: 0px; padding: 0px;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Berikutnya, kita ikut pedoman di gambar atas. Copy-kan file<strong style="margin: 0px; padding: 0px;"> cache.img</strong> yang terdapat dalam folder<strong style="margin: 0px; padding: 0px;">original_update</strong> ke <strong style="margin: 0px; padding: 0px;">folder csc_020413_170014</strong>. Setelah selesai dicopykan baru kita tekan Enter untuk melanjutkan. Setelah Enter ditekan, maka proses untuk unpack cache.img berlangsung, tampak seperti gambar di bawah ini.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen19" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_19.jpg" style="border: 0px none; margin: 0px; padding: 0px;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Selanjutnya dari gambar di atas adalah proses untuk unpack image tersebut mendapatkan file <strong style="margin: 0px; padding: 0px;">sec_csc.zip</strong>. Untuk itu tekan Enter untuk melanjutkan.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen20" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_20.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Lalu kita ikuti petunjuk gambar di atas ini (Jangan tekan Enter sebelum proses ini selesai dilaksanakan!!!). Jalankan<strong style="margin: 0px; padding: 0px;"> DiskInternals Linux Reader</strong>, lalu buka menu<strong style="margin: 0px; padding: 0px;"> Drives</strong>, lalu <strong style="margin: 0px; padding: 0px;">Mount</strong> <strong style="margin: 0px; padding: 0px;">Image</strong>. Berikutnya tekan<strong style="margin: 0px; padding: 0px;"> Browse</strong>untuk memilih image yang terletak dalam folder csc_020413_170014\<strong style="margin: 0px; padding: 0px;">ext4_cache.img</strong>, lalu tekan tombol <strong style="margin: 0px; padding: 0px;">Mount</strong>. Hasilnya seperti gambar di bawah ini:<strong style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;" /></strong></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen21" border="0" height="405" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_21.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="742" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Lalu double-click hdd<strong style="margin: 0px; padding: 0px;"> Linux native Volume 1, </strong>lalu double-click<strong style="margin: 0px; padding: 0px;"> recovery File folder DIR</strong>, seperti gambar di bawah ini: <img alt="kitchen22" border="0" height="334" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_22.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="592" /><strong style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;" /></strong></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> maka tampak sebuah file <strong style="margin: 0px; padding: 0px;">sec_csc.zip</strong>. seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img border="0" height="334" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_23.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="502" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <strong style="margin: 0px; padding: 0px;"> right-click</strong> file sec_csc.zip, lalu click<strong style="margin: 0px; padding: 0px;"> Save</strong>, seperti gambar di atas. Selanjutnya click <strong style="margin: 0px; padding: 0px;">Next</strong>, lalu<strong style="margin: 0px; padding: 0px;"> uncheck</strong>Save directory structure, dan simpan output-nya di folder csc_020413_170014, selanjutnya click<strong style="margin: 0px; padding: 0px;"> Next</strong> , lagi click<strong style="margin: 0px; padding: 0px;">Next</strong> , dan<strong style="margin: 0px; padding: 0px;"> Finish</strong> (lihat gambar di bawah ini).</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><br /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen24" border="0" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_24.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Setelah selesai, tutup jendela DiskInternals Linux reader ini. Lalu pada menu kitchen tekan Enter untuk melanjutkan, hasilnya seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen25" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_25.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Selanjutnya tekan Enter, kembali ke menu Plugins script, dan tekan 0 untuk kembali ke menu ADVANCED OPTIONS.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">11. Langkah selanjutnya adalah mengekstrak file sec_csc.zip. Kita gunakan utility 7zip untuk mengekstrak file sec_csc.zip yang terletak pada folder csc_020413_170014. Setelah selesai, hasilnya dapat dilihat pada folder ../sec_csc/system, seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen26" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_26.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="457" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Selanjutnya seluruh file dan folder pada gambar di atas kita copy kan ke dalam folder \Kitchen\WORKING_020413_143332\system seperti gambar di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen27" border="0" height="654" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_27.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="715" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Selanjutnya tutup jendela di atas, kembali ke menu ADVANCED OPTIONS untuk melakukan proses berikutnya.</div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-28721470617130211822013-02-22T10:16:00.000-08:002014-02-01T04:52:03.215-08:00Membuat Custom ROM dengan Android Kitchen (bag 1)<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px; text-align: justify;">Dalam tulisan kali ini, saya akan menjelaskan bagaimana caranya kita untuk membuat sebuah "Custom rom" untuk handset Android, khususnya Samsung Galaxy Note II. Stock ROM (Official release) yang kita gunakan adalah N7100XXDMA6_N7100OLBDMA4_XSE (<a href="http://www.hotfile.com/dl/191687447/d71ec60/N7100XXDMA6_N7100OLBDMA4_XSE.zip.html" style="color: #095197; margin: 0px; padding: 0px;" target="_blank" title="Download XXDMA6">download</a>). Untuk menggunakan custom rom ini nanti, terlebih dahulu handset sudah harus di root.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><strong style="margin: 0px; padding: 0px;">Tools yang diperlukan:</strong><br style="margin: 0px; padding: 0px;" />- JDK : <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" style="color: #095197; margin: 0px; padding: 0px;" target="_blank" title="Java Development Kits">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a><br style="margin: 0px; padding: 0px;" />- notepad++ : <a href="http://notepad-plus-plus.org/" style="color: #095197; margin: 0px; padding: 0px;" target="_blank" title="Notepad++">http://notepad-plus-plus.org/</a><br style="margin: 0px; padding: 0px;" />- cygwin : <a href="http://cygwin.com/setup.exe" style="color: #095197; margin: 0px; padding: 0px;" target="_blank" title="Cygwin">http://cygwin.com/setup.exe</a><br style="margin: 0px; padding: 0px;" />- dsixda Android Kitchen : <a href="http://forum.xda-developers.com/showthread.php?t=633246" style="color: #095197; margin: 0px; padding: 0px;" target="_blank" title="Android Kitchen">http://forum.xda-developers.com/showthread.php?t=633246</a><br style="margin: 0px; padding: 0px;" />- 7zip : <a href="http://www.7-zip.org/download.html" style="color: #095197; margin: 0px; padding: 0px;" target="_blank" title="Download 7zip">http://www.7-zip.org/download.html</a></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">Setelah tools di atas selesai di unduh, silahkan di install sendiri.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><strong style="margin: 0px; padding: 0px;">Langkah-langkah untuk membuat Custom ROM:</strong></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">1. Ekstrak file N7100XXDMA6_N7100OLBDMA4_XSE.zip menggunakan 7zip, lalu kita lanjutkan untuk mengekstrak file N7100XXDMA6_N7100OLBDMA4_N7100DXDLK5_HOME.tar.md5. Hasil dari ekstraksi ini diperoleh file yang terdiri dari: <em style="font-weight: bold; margin: 0px; padding: 0px;">boot.img, cache.img, hidden.img, modem.bin, recovery.img, sboot.bin, system.img,</em> dan<em style="font-weight: bold; margin: 0px; padding: 0px;"> tz.img</em>.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">2. Copy-kan file <em style="font-weight: bold; margin: 0px; padding: 0px;">boot.img, cache.img, system.img</em> dan <em style="font-weight: bold; margin: 0px; padding: 0px;">modem.bin</em> ke dalam folder .<em style="font-weight: bold; margin: 0px; padding: 0px;">./Kitchen/original_update.</em></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">3. Install DiskInternal Linux Reader yang terdapat dalam folder .<em style="font-weight: bold; margin: 0px; padding: 0px;">./Kitchen/tools/diskinternals_windows</em>.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">4. Jalankan <strong style="margin: 0px; padding: 0px;">Cygwin.bat</strong>, lalu pada command line interface cygwin, ketikkan:<br style="margin: 0px; padding: 0px;" /> $ <strong style="margin: 0px; padding: 0px;">cd kitchen</strong><br style="margin: 0px; padding: 0px;" /> $ <strong style="margin: 0px; padding: 0px;">./menu</strong></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen1" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_1.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /> <br style="margin: 0px; padding: 0px;" /> Lalu tampil jendela seperti di bawah ini:<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /><img alt="kitchen2" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_2.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><br /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">5. Sekarang kita mulai untuk membuat custom rom ini. Pertama kita pilih Menu <strong style="margin: 0px; padding: 0px;">1-Set up working folder from ROM</strong>.<br style="margin: 0px; padding: 0px;" /> Maka tampillah jendela seperti di bawah ini:</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px; text-align: center;"><img alt="kitchen3" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_3.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px; text-align: center;"> Selanjutnya tekan Enter untuk melanjutkan. Maka terlihat <em style="font-weight: bold; margin: 0px; padding: 0px;">ROM</em> yang tersedia, kita pilih 1, seperti gambar di bawah ini:<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /><img alt="kitchen4" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_4.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Berikutnya di tampilkan untuk penamaan working folder, seperti gambar di bawah ini:<br style="margin: 0px; padding: 0px;" /><img alt="kitchen5" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_5.jpg" style="border: 0px; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Kita tekan saja tombol Enter, berarti kita menggunakan nama working folder seperti tampak di atas.</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;">6. Dari langkah yang dilakukan sampai no.5, script kitchen mulai melakukan prosesnya, seperti gambar di bawah ini:<br style="margin: 0px; padding: 0px;" /><img alt="kitchen6" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_6.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> <img alt="kitchen7" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_7.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Ikuti langkah yang tampak pada gambar di atas bagi proses untuk gambar di bawah ini (<em style="font-weight: bold; margin: 0px; padding: 0px;">Perhatian!!!, jangan di tutup atau tekan tombol Enter dari jendela gambar di atas. Selesaikan dulu proses yang dilakukan oleh Ext2explorer pada gambar di bawah ini</em>).</div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"><img alt="kitchen8" border="0" height="410" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_8.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="816" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Setelah selesai proses yang dilakukan oleh Ext2explorer, silahkan di tutup jendelanya, lalu tekan tombol Enter untuk melanjutkan. Script Kitchen akan melakukan proses berikutnya seperti gambar di bawah ini:<br style="margin: 0px; padding: 0px;" /><img alt="kitchen9" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_9.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /></div><div style="background-color: white; color: #333333; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 1.7em; margin-bottom: 8px; margin-top: 8px; padding: 0px;"> Selanjutnya kita tekan saja tombol Enter untuk melihat informasi sementara mengenai ROM ini, seperti gambar di bawah ini:<br style="margin: 0px; padding: 0px;" /><img alt="kitchen10" border="0" height="342" src="http://hans.polinpdg.ac.id/images/kitchen/kitchen_10.jpg" style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle;" width="677" /><br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /> Selanjutnya tekan tombol Enter untuk kembali ke Menu Utama. Proses tahapan pertama selesai !!!.</div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-65614448670947806072013-02-22T10:14:00.000-08:002014-02-01T04:52:03.236-08:00LINE for PC<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 15px; padding: 0px; vertical-align: baseline;">Akhir-akhir ini banyak aplikasi chatting seperti yahoo! Messenger, G-Talk, dan ratusan aplikasi lainnya. Salah satu aplikasi Chat yang saya suka adalah LINE yang dikembangkan oleh <a href="http://line.naver.jp/" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;" title="Naver">Naver</a>. Awalnya aplikasi ini hanya bekerja pada perangkat android dan selanjutnya dikembangkan untuk dapat bekerja pada beberapa platform OS termasuk Windows.</div><div style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 15px; padding: 0px; vertical-align: baseline;">Pada turorial ini saya akan share tentang cara menggunakan LINE pada Windows.</div><ol style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; list-style-image: initial; list-style-position: initial; margin: 0px 0px 15px 32px; padding: 0px; vertical-align: baseline;"><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Buka situsnya <a href="http://line.naver.jp/en" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;">disini</a>.</li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Selanjutnya klik tombol Windows – Mac OS X<br /><a href="http://mangalaisme.files.wordpress.com/2012/08/1.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;"><img alt="" class="alignnone size-medium wp-image-44" height="175" src="http://mangalaisme.files.wordpress.com/2012/08/1.png?w=300&h=175" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border: none; height: auto; margin: 0px 0px 10px; max-width: 100%; padding: 0px; vertical-align: baseline;" title="1" width="300" /></a></li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Sesaat kemudian akan muncul kotak dialog untuk menyimpan aplikasi, klik saja “save” atau “start download” (jika anda menggunakan IDM).</li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Setelah download selesai, klik ganda filenya untuk menjalankan penginstalan. pilih next hingga finish dan aplikasi siap dijalankan.</li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Jika anda sudah punya akun LINE sebelumnya pada handphone anda, maka anda harus meregister dulu email anda pada ponsel sebelum bisa menggunakan LINE pada PC anda.</li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Cara meregister email pada Ponsel yaitu, masuk ke menu pengaturan, dan pilih Pendaftaran Email. Masukkan alamat email dan password pada kotak yang tersedia, tunggu prosesnya dan setelah ada pesan Success maka anda segera dapat memulai menggunakan LINE pada PC anda.</li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Jalankan aplikasi LINE di PC, masukkan alamat email dan password pada kotak yang tersedia dan klik Login.<a href="http://mangalaisme.files.wordpress.com/2012/08/2.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;"><img alt="" class="size-medium wp-image-45 aligncenter" height="300" src="http://mangalaisme.files.wordpress.com/2012/08/2.png?w=170&h=300" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border: none; clear: both; display: block; height: auto; margin: 0px auto 12px; max-width: 100%; padding: 0px; vertical-align: baseline;" title="2" width="170" /></a></li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; text-align: center; vertical-align: baseline;">Profil anda akan segera tampil dan anda siap menggunakannya. <a href="http://mangalaisme.files.wordpress.com/2012/08/3.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;"><img alt="" class="alignnone size-medium wp-image-46" height="300" src="http://mangalaisme.files.wordpress.com/2012/08/3.png?w=170&h=300" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border: none; height: auto; margin: 0px 0px 10px; max-width: 100%; padding: 0px; vertical-align: baseline;" title="3" width="170" /></a></li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; text-align: center; vertical-align: baseline;">Klik pada foto teman, selanjutnya muncul kotak di samping kanan dan klik tombol chats untuk memulai. <a href="http://mangalaisme.files.wordpress.com/2012/08/6.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;"><img alt="" class="alignnone size-medium wp-image-47" height="166" src="http://mangalaisme.files.wordpress.com/2012/08/6.png?w=300&h=166" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border: none; height: auto; margin: 0px 0px 10px; max-width: 100%; padding: 0px; vertical-align: baseline;" title="6" width="300" /></a></li><li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Anda sekarang dapat ber-chat ria dengan teman anda dan menambahkan stiker-stiker layaknya di ponsel.</li></ol><div style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 15px; padding: 0px; text-align: center; vertical-align: baseline;"><a href="http://mangalaisme.files.wordpress.com/2012/08/5.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-width: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;"><img alt="" class="alignnone size-medium wp-image-48" height="300" src="http://mangalaisme.files.wordpress.com/2012/08/4.png?w=178&h=300" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border: none; height: auto; margin: 0px 0px 10px; max-width: 100%; padding: 0px; vertical-align: baseline;" title="4" width="178" /></a></div><div style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 15px; padding: 0px; text-align: center; vertical-align: baseline;"><a href="http://mangalaisme.files.wordpress.com/2012/08/5.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-width: 0px; color: #3c96df; margin: 0px; padding: 0px; text-decoration: initial; vertical-align: baseline;"><img alt="" class="alignnone size-medium wp-image-49" height="300" src="http://mangalaisme.files.wordpress.com/2012/08/5.png?w=277&h=300" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border: none; height: auto; margin: 0px 0px 10px; max-width: 100%; padding: 0px; vertical-align: baseline;" title="5" width="277" /></a></div><div style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 15px; padding: 0px; vertical-align: baseline;">SEKIAN</div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-70724197043877401582013-02-22T10:13:00.000-08:002014-02-01T04:52:03.238-08:00Whatsapp for PC<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;">whatsapp adalah sebuat aplikasi chating atau alat komunikasi lewat text dengan multi platform yang dimana pada awalnya aplikasi whatsapp ini hanya Cuma bisa dijalankan di ponsel iPhone saja, namun dengan berkembangnya teknologi ponsel yang semakin canggih maka banyak juga menggunakan aplikasi whatsapp antara lain: ponsel berbasis android, smartphone, windows mobille dan aplikasi blackberry. Namun jangan salah sekarang aplikasi whatsapp mulai bisa dijalankan untuk PC, laptop dan tablet yang dimana lebih flexible daripada Applikasi BBM (Blackberry Messengger). Dikarenakan kalau aplikasi bbm diperlukan pin bb namun untuk aplikasi whatsapp hanya meng-add dengan hanya nomor telepon yang digunakan teman kita.<br /><b><br />Aplikasi whatsapp</b> ini pada dasarnya hampir menyerupai Applikasi BBM (Blackberry Messengger), dimana kita juga bisa menampilkan foto kita maupun dapat juga saling chatting dengan teman-teman kita. Namun yang membedakan aplikasi blackberry messengger atau bbm dengan aplikasi whatsapp yaitu:</div><ul style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;"><li>Aplikasi BBM (Blackberry Messengger) hanya dapat dilakukan maupun dijalankan untuk sistem operasi OS blackberry saja, sedangkan aplikasi Whatsapp bisa dapat digunakan untuk berbagai perangkat antara lain, aplikasi Whatsapp for PC, untuk smarphone, windows mobille, tablet, iphone dan android</li><li>Aplikasi blackberry dalam menghubungkan atau add teman kita membutuhkan pin plackberry sedangkan Whatsapp hanya menggunakan nomor telepon saja untuk add teman, cukup isi daftar kontak dengan nomor handphone teman anda dan lakukan sinkronisasi dengan menekan tombol refresh di option saat berada di daftar teman. Apabila teman anda terdaftar menggunakan nomor handphone tersebut, Whatsapp akan mencarinya sendiri dan menampilkan teman anda langsung di daftar panggilan.</li><li>Hasil percakapan atau chatting di Whatsapp kita bisa pilih beberapa percakapan untuk kita clear chat tidak perlu semuanya terhapus, sedangkan di Blackberry Messengger jika kita jalankan fungsi clear chat maka semuanya akan terhapus</li><li>Icoon smile di Whatsapp lebih lengkap daripada aplikasi blackberry messenger</li><li>Autotext blackberry juga bisa dijalankan di aplikasi whatsaap</li></ul><br style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;" /><span style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;">Untuk </span><b style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;">install Whatsapp for PC</b><span style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;"> tidaklah sulit, silahkan ikuti langkah-langkah atau cara menginstall Whatsapp for PC berikut ini:</span><br style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;" /><ul style="background-color: #ebebeb; color: #333333; font-family: Arial, serif; font-size: 14px; line-height: 22.875px;"><li>Pertama-tama sebelumnya anda harus menginstall Emulator Android, bisa didapatkan di <a href="http://www.mediafire.com/?zl3bw0jgvocrqwn" style="color: #3366cc; text-decoration: initial;">sini</a> .</li><li>Setelah Emulator Android berhasil di install yang kedua anda juga harus menginstall applikasi Whatsapp for Android di <a href="http://www.whatsapp.com/android/" style="color: #3366cc; text-decoration: initial;">sini</a> , install dan jalankan</li><li>Copy file ke C:\Documents and Settings\Nama Profile Anda\youwave\android apps.</li><li>Kemudian klik 2 kali dan tunggu proses aplikasi Whatsapp for PC sampai muncul tampilan “Welcome to Whatsapp” seperti gambar dibawah, klik Agree and Continue<a href="http://4.bp.blogspot.com/-wTPsP9-3ii0/UC4YRCBj-wI/AAAAAAAABrg/oy-MXg0XhhA/s1600/Whatsapp%2Bfor%2BPC%2B1.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777582052843191042" src="http://4.bp.blogspot.com/-wTPsP9-3ii0/UC4YRCBj-wI/AAAAAAAABrg/oy-MXg0XhhA/s400/Whatsapp%2Bfor%2BPC%2B1.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 290px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><a href="http://2.bp.blogspot.com/-fj2GBnbh0Zk/UC4YRu6PG8I/AAAAAAAABrs/jcL-aPUfr7U/s1600/Whatsapp%2Bfor%2BPC%2B2.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777582064892058562" src="http://2.bp.blogspot.com/-fj2GBnbh0Zk/UC4YRu6PG8I/AAAAAAAABrs/jcL-aPUfr7U/s400/Whatsapp%2Bfor%2BPC%2B2.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 292px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a></li><li>Isi Kode Negara dan No. Telepon anda klik OK.</li><li>Kemudian Akan muncul “Dialog box” nomor handphone yang anda masukkan kemudian Klik OK<a href="http://4.bp.blogspot.com/-UXLcpiILvDU/UC4YR5A4E5I/AAAAAAAABr4/fByxTtkhn9I/s1600/Whatsapp%2Bfor%2BPC%2B3.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777582067604263826" src="http://4.bp.blogspot.com/-UXLcpiILvDU/UC4YR5A4E5I/AAAAAAAABr4/fByxTtkhn9I/s400/Whatsapp%2Bfor%2BPC%2B3.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 290px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><a href="http://2.bp.blogspot.com/-iUyDU6qc100/UC4YScBYPtI/AAAAAAAABsE/jLbJd03zo90/s1600/Whatsapp%2Bfor%2BPC%2B4.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777582077001613010" src="http://2.bp.blogspot.com/-iUyDU6qc100/UC4YScBYPtI/AAAAAAAABsE/jLbJd03zo90/s400/Whatsapp%2Bfor%2BPC%2B4.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 289px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a></li><li>Kemudian tunggu halaman SMS Verivication untuk mendaftarkan nomor hanphone anda. Apabila muncul peringatan “SMS Verivication Failed”, klik Call Me untuk mendengar 3 digit angka untuk proses verivikasi. Anda akan menerima panggilan berupa 3 digit yang harus di input.<a href="http://1.bp.blogspot.com/-aNPeW-3OP0M/UC4YSsheOSI/AAAAAAAABsQ/w5EU6fnNVGI/s1600/Whatsapp%2Bfor%2BPC%2B5.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777582081431189794" src="http://1.bp.blogspot.com/-aNPeW-3OP0M/UC4YSsheOSI/AAAAAAAABsQ/w5EU6fnNVGI/s400/Whatsapp%2Bfor%2BPC%2B5.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 290px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a></li><li>Kemudian masukkan 3 angka tersebut untuk verifikasi klik ok sampai muncul “Verivication Complete” dan halaman yang akan meminta anda menginput nama Anda. Centang “Include Whatsapp shortcut on home screen” jika ingin menampilkan icon Whatsapp di layar home. Klik OK untuk melanjutkan.<a href="http://2.bp.blogspot.com/-gIzxU0w3_Pw/UC4aH9D20YI/AAAAAAAABso/a8dzwA7YqNM/s1600/Whatsapp%2Bfor%2BPC%2Bmeh%2Bterakhir.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777584095915069826" src="http://2.bp.blogspot.com/-gIzxU0w3_Pw/UC4aH9D20YI/AAAAAAAABso/a8dzwA7YqNM/s400/Whatsapp%2Bfor%2BPC%2Bmeh%2Bterakhir.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 275px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><a href="http://1.bp.blogspot.com/-qeZmOzCXvCQ/UC4aITsD5NI/AAAAAAAABs0/PKZJAmSWLrE/s1600/Whatsapp%2Bfor%2BPC%2Bterakhir.jpg" style="color: #3366cc; text-decoration: initial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5777584101989278930" src="http://1.bp.blogspot.com/-qeZmOzCXvCQ/UC4aITsD5NI/AAAAAAAABs0/PKZJAmSWLrE/s400/Whatsapp%2Bfor%2BPC%2Bterakhir.jpg" style="border: 4px solid rgb(238, 238, 238); cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 285px;" /></a></li><li>Setelah OK verifikasinya maka anda bisa langdung menggunakan untuk Chatting dengan teman anda dengan add lewat nomor handphone teman anda.</li></ul></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-35868321011249243402013-02-22T10:09:00.000-08:002014-02-01T04:52:03.218-08:00SDK + Eclipse<div dir="ltr" style="text-align: left;" trbidi="on"><span style="background-color: #e5e0d2; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: justify;">Teknologi mobile programing berkembang terus dan saat ini menjadi semakin lengkap sejak adanya Android. Android merupakan perangkat lunak untuk perangkat mobile yang meliputi sistem operasi, dan aplikasi ini di release oleh Google. Sedangkan Android SDK (</span><em style="background-color: #e5e0d2; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 0px; padding: 0px; text-align: justify;">Software Development Kit)</em><span class="Apple-converted-space"> </span><span style="background-color: #e5e0d2; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: justify;">menyediakan Tools dan API yang di perlukan untuk mengembangkan aplikasi pada platform Android dengan menggunakan bahasa pemrograman Java.</span><span id="more-209" style="background-color: #e5e0d2; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 0px; padding: 0px; text-align: justify;"></span><span style="background-color: #e5e0d2; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: justify;"></span><br /><div class="postcontent" style="background-color: #e5e0d2; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 0px; padding: 0px; text-align: justify;"><div style="margin-bottom: 20px; padding: 0px;">Dalam melakukan instalasi SDK Android, pastikan seluruh paket yang diperlukan telah ada, paket-paket tersebut adalah :</div><ol style="color: #00429e; list-style-position: inside; margin: 0px; padding: 0px 0px 0px 24px;"><li style="background-image: none; background-position: initial initial; background-repeat: initial initial; line-height: 1em; margin: 0px 0px 6px; padding: 0px;">Paket JDK yaitu jdk-6u3-windows-i586-p.exe</li><li style="background-image: none; background-position: initial initial; background-repeat: initial initial; line-height: 1em; margin: 0px 0px 6px; padding: 0px;"><a href="http://dl.google.com/android/installer_r11-windows.exe" style="color: #00429e; text-decoration: initial;">Paket SDK yaitu installer_r11-windows.exe</a></li><li style="background-image: none; background-position: initial initial; background-repeat: initial initial; line-height: 1em; margin: 0px 0px 6px; padding: 0px;">Paket Eclipse Galileo yaitu eclipse –jee-galileo-win32.zip</li><li style="background-image: none; background-position: initial initial; background-repeat: initial initial; line-height: 1em; margin: 0px 0px 6px; padding: 0px;"><a href="http://dl.google.com/android/ADT-10.0.1.zip" style="color: #00429e; text-decoration: initial;">Paket Plugin ADT yaitu ADT-10.0.1.zip</a></li></ol><div style="margin-bottom: 20px; padding: 0px;">Nah sekarang, mari kita lakukan proses instalisasi semua paket yang di perlukan, dengan catatan paket JDK (<em style="margin: 0px; padding: 0px;">java)</em><span class="Apple-converted-space"> </span>telah terinstal terlebih dalu di komputer anda.</div><div style="margin-bottom: 20px; padding: 0px;">1. Buatlah sebuah folder baru untuk tempat melakukan instalisasi semua paket dan paket tersebut kita letakkan di dalam folder baru yang kita buat. Misalnya<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">C:\android</strong><span class="Apple-converted-space"> </span><em style="margin: 0px; padding: 0px;">(folder baru)</em>, tempatkan paket SDK dalam folder android lalu ekstrak file<span class="Apple-converted-space"> </span><em style="margin: 0px; padding: 0px;">Android-sdk_r05-windows.zip</em>, lalu rename hingga menjadi<strong style="margin: 0px; padding: 0px;">C:\android\android_sdk\</strong></div><div style="margin-bottom: 20px; padding: 0px;">2. Ekstrak file<span class="Apple-converted-space"> </span><em style="margin: 0px; padding: 0px;">ADTPlugin.zip</em><span class="Apple-converted-space"> </span>lalu tempatkan pada folder kerja tersebut, lalu rename sehingga menjadi<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">C:\android\ADTPlugin\</strong></div><div style="margin-bottom: 20px; padding: 0px;">3. Ekstrak file<span class="Apple-converted-space"> </span><em style="margin: 0px; padding: 0px;">eclipse –jee-galileo-win32.zip</em><span class="Apple-converted-space"> </span>lalu tempatkan pada folder kerja tersebut, lalu rename sehingga menjadi<strong style="margin: 0px; padding: 0px;">C:\android\eclipse_galileo\</strong></div><div style="margin-bottom: 20px; padding: 0px;">4. Nah, setelah selesai ekstraksi paket, dengan menggunakan Windows Explorer klik ganda file<strong style="margin: 0px; padding: 0px;">C:\android\eclipse_galileo\eclipse.exe</strong>lalu akan muncul seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="load rony" class="aligncenter" height="289" src="http://teknonesia.com/wp-content/uploads/2011/04/eclipse-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;">5. Gambar tersebut merupakan tampilan looding screen eclipse, tunggu hingga proses bar penuh, dan selanjutnya akan berganti tampilan menjadi seperti berikut. jangan lupa menutup tampilan welcome dengan tanda [X].</div><div style="margin-bottom: 20px; padding: 0px;">7. Instalasi plugin android, dengan cara klik menu<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Help – Install New Software</strong><span class="Apple-converted-space"> </span>seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="java EE rony" class="aligncenter" height="233" src="http://teknonesia.com/wp-content/uploads/2011/04/java-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;">8. Selanjutnya klik tombol Add, akan muncul kotak dialog. Pada file name, ketik Android Plugin. Klik tombol archive dan akan muncul jendela browser, lalu pilih file<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">C:\android\ADTPlugin\ADT-0.9.6.zip</strong>sehingga lokasi file tersebut tertulis pada field location. Lalu klik ok. Lihat gambar berikut</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="add site rony" class="aligncenter" height="169" src="http://teknonesia.com/wp-content/uploads/2011/04/add-site-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="408" /></div><div style="margin-bottom: 20px; padding: 0px;">9. Selanjutnya akan muncul hasil instalasi dan dapat dilihat pada gambar berikut. Beri tanda cek pada developer tools, sehingga seluruh childnya juga diberi tanda cek. Untuk bagian ini perlu di ingat agar koneksi internet di putus, sebab pada proses instalasi tidak secara otomatis melakukan update atau mendownload versi paket yang lain. Klik next dan finish tunggu hingga proses instal selesai lalukan restart dengan klik yes seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="instal rony" class="aligncenter" height="336" src="http://teknonesia.com/wp-content/uploads/2011/04/instal-1-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="427" /></div><div style="margin-bottom: 20px; padding: 0px;">10. Setelah eclipse restart, akan muncul kotak dialog workspace lancher yang menyatakan workspace yang akan digunakan sebagai pembuatan proyek nantinya. Dengan menggunakan windows explorer buat lah sebuah folder baru dengan nama latihan atau klik browse akan tampil<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Select Workspace Directory</strong><span class="Apple-converted-space"> </span>klik Make New Folder lalu rename dengan nama latihan, pilih ok dan ok lagi. Seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="swd rony" class="aligncenter" height="239" src="http://teknonesia.com/wp-content/uploads/2011/04/SWD-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px; text-align: left;">11. Selanjutnya eclipse menampilkan loading screen. Tunggu hingga proses bar selesai.</div><div style="margin-bottom: 20px; padding: 0px;">12. Akhirnya menampilkan IDE eclipse, jangan lupa menutup welcome screen dengan mengklik tanda [X] seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="welc rony" class="aligncenter" height="335" src="http://teknonesia.com/wp-content/uploads/2011/04/welcome-1-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;">13. Nah, untuk tahap ini sekarang kita melakukan instalasi SDK Android, setelah Java EE – Eclipse terbuka, pilih menu window – klik preferences seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="java 1 rorny" class="aligncenter" height="301" src="http://teknonesia.com/wp-content/uploads/2011/04/Java-EE-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;">14. Untuk mengambil SDK Android pilih<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Browse<span class="Apple-converted-space"> </span></strong>pada SDK Location, dimana paket yang kita buat dengan folder<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">android</strong><span class="Apple-converted-space"> </span>misalnya :<strong style="margin: 0px; padding: 0px;">C:\android\android_sdk\<span class="Apple-converted-space"> </span></strong>lalu klik ok. Lihat gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="brows rony" class="aligncenter" height="336" src="http://teknonesia.com/wp-content/uploads/2011/04/browse-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="390" /></div><div style="margin-bottom: 20px; padding: 0px;">15. Pilih<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Apply<span class="Apple-converted-space"> </span></strong>dan klik<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">OK.</strong></div><div style="margin-bottom: 20px; padding: 0px;">16. Nah, sekarang kita akan melakukan konfigurasi terhadap<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;"><em style="margin: 0px; padding: 0px;">path</em></strong><span class="Apple-converted-space"> </span>lokasi android, caranya klik<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Start Windows</strong><span class="Apple-converted-space"> </span>–<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">My Computer – Klik kanan Propertis<span class="Apple-converted-space"> </span></strong>seperti gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="set rony" class="aligncenter" height="359" src="http://teknonesia.com/wp-content/uploads/2011/04/admin-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="336" /></div><div style="margin-bottom: 20px; padding: 0px;">17. Pada<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">system Properties<span class="Apple-converted-space"> </span></strong>pilih<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Advanced<span class="Apple-converted-space"> </span></strong>–<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Environment Variables</strong></div><div style="margin-bottom: 20px; padding: 0px;">18. Pada<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Environment Variables<span class="Apple-converted-space"> </span></strong>pilih<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Path<span class="Apple-converted-space"> </span></strong>pada<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">System Variables<span class="Apple-converted-space"> </span></strong>lalu klik tombol<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Edit.</strong></div><div style="margin-bottom: 20px; padding: 0px;">19. Untuk tampilan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Edit System Variables,<span class="Apple-converted-space"> </span></strong>tepatnya pada<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Variable Value :</strong><span class="Apple-converted-space"> </span>isilah lokasi paket android yang kita buat sebelumnya, dengan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">catatan</strong><span class="Apple-converted-space"> </span>berikan tanda<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">; (titik koma)<span class="Apple-converted-space"> </span></strong>di akhir<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">String Variable Value</strong>lalu isikan paket android yang kita buat<strong style="margin: 0px; padding: 0px;"> </strong>Misalnya,<strong style="margin: 0px; padding: 0px;">;C:\android\android_sdk\<span class="Apple-converted-space"> </span></strong>, klik ok. Lihat gambar berikut :</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="esv rony" class="aligncenter" height="145" src="http://teknonesia.com/wp-content/uploads/2011/04/esv.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="347" /></div><div style="margin-bottom: 20px; padding: 0px;">20. Setelah<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Edit System Variables<span class="Apple-converted-space"> </span></strong>selesai, pada<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Environment Variables<span class="Apple-converted-space"> </span></strong>klik ok.</div><div style="margin-bottom: 20px; padding: 0px;">21. Setelah selesai melakukan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;"><em style="margin: 0px; padding: 0px;">path<span class="Apple-converted-space"> </span></em>SDK Android,<span class="Apple-converted-space"> </span></strong>sekarang kita kembali ke menu editor<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Java EE – Eclipse,<span class="Apple-converted-space"> </span></strong>klik tombol<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;"><em style="margin: 0px; padding: 0px;">Open the Android SDK and AVD Manager</em></strong><span class="Apple-converted-space"> </span>yang letaknya tepat dibawah menu<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">RUN</strong>yang di tandai kotak merah seperti gambar berikut</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="and rony" class="aligncenter" height="178" src="http://teknonesia.com/wp-content/uploads/2011/04/and-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;">22. Pada tampilan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Android SDK and AVD Manager<span class="Apple-converted-space"> </span></strong>pilih<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">New<span class="Apple-converted-space"> </span></strong>Untuk melakukan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">AVD</strong><span class="Apple-converted-space"> </span>baru.</div><div style="margin-bottom: 20px; padding: 0px;">23. Pada tampilan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Create new (AVD)<span class="Apple-converted-space"> </span></strong>isilah nama baru, target, sd card. Misalnya</div><div style="margin-bottom: 20px; padding: 0px 0px 0px 60px;">Name : froyo</div><div style="margin-bottom: 20px; padding: 0px 0px 0px 60px;">Target : klik tombol combo box (tanda panah kebawah) pilih sesuai yang ada di gambar</div><div style="margin-bottom: 20px; padding: 0px 0px 0px 60px;">SD Card : klik tombol size, isikan string 500.</div><div style="margin-bottom: 20px; padding: 0px;">Sesuaikan dengan gambar dibawah, lalu klik Create AVD.</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="rony" class="aligncenter" height="439" src="http://teknonesia.com/wp-content/uploads/2011/04/froyo-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="336" /></div><div style="margin-bottom: 20px; padding: 0px;">24. Maka akan muncul<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">AVD</strong><span class="Apple-converted-space"> </span>baru yang kita buat dengan nama<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">froyo</strong><span class="Apple-converted-space"> </span>sebelumnya, lalu select<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">froyo</strong>klik tombol<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Start.</strong></div><div style="margin-bottom: 20px; padding: 0px;">25. Untuk tampilan<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Launch Options</strong><span class="Apple-converted-space"> </span>pilih<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;">Launch<span class="Apple-converted-space"> </span></strong>dan tidak perlu melakukan aktivitas sama sekali.<strong style="margin: 0px; padding: 0px;"></strong></div><div style="margin-bottom: 20px; padding: 0px;">26. Nah, inilah tahap akhir melakukan instalasi android, kita tinggal menunggung proses<span class="Apple-converted-space"> </span><strong style="margin: 0px; padding: 0px;"><em style="margin: 0px; padding: 0px;">loading</em></strong></div><div style="margin-bottom: 20px; padding: 0px;">27. Nah, akhirnya proses instalasi Android selesai. Inilah Android yang ada di HandPhone saat ini, jadi kita tidak harus beli handphone yang memilki OS android dan masih terbilang mahal. Cukup bermodalkan paket – paket android dan komputer anda seperti yang diutarakan sebelumnya, anda bisa bereksplorasi sesuka hati dengan android yang instal di komputer anda.</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="android rony 1" class="aligncenter" height="317" src="http://teknonesia.com/wp-content/uploads/2011/04/proyo-5-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;">28. Ini merupakan konten yang ada pada android.</div><div style="margin-bottom: 20px; padding: 0px; text-align: center;"><img alt="tampilan android" class="aligncenter" height="318" src="http://teknonesia.com/wp-content/uploads/2011/04/froyo-6-rony.jpg" style="display: block; margin: 10px auto; padding: 0px;" width="448" /></div><div style="margin-bottom: 20px; padding: 0px;"><strong style="margin: 0px; padding: 0px;">Kesimpulan</strong></div><div style="margin-bottom: 20px; padding: 0px;">Cukup mudah bukan dan sedikit butuh kesabaran dalam proses instalasi SDK Android, tapi dengan artikel ini anda di bimbing secara tahap demi tahap pada proses instalasi SDK Android.</div></div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-38265609141965466982013-02-22T09:29:00.000-08:002014-02-01T04:52:03.220-08:00Root dengan SOC (SuperOneClick)<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px;">Kini rooting android jauh lebih mudah dengan munculnya aplikasi superoneclick. Dengan adanya superoneclick anda dapat me-root android dengan hanya memainkan click saja. SuperOneClick dapat me-root hampir semua android. SuperOne Click Dapat di download <a href="http://forum.xda-developers.com/showthread.php?t=803682" style="color: #538e08; outline: none; text-decoration: initial;">disini</a></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">Compatibility List</div><ul style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><li>Acer Liquid Metal</li><li>Dell Streak</li><li>HTC Magic (Sapphire) 32B</li><li>HTC Bee</li><li>LG Ally</li><li>Motorola Atrix4G</li><li>Motorola Charm</li><li>Motorola Cliq</li><li>Motorola Droid</li><li>Motorola Flipside</li><li>Motorola Flipout</li><li>Motorola Milestone</li><li>Nexus One</li><li>Samsung Captivate</li><li>Samsung Galaxy 551 (GT-I5510)</li><li>Samsung Galaxy Portal/Spica I5700</li><li>Samsung Galaxy S 4G</li><li>Samsung Galaxy S I9000</li><li>Samsung Galaxy S SCH-I500</li><li>Samsung Galaxy Tab</li><li>Samsung Transform M920</li><li>Samsung Vibrant</li><li>Sony Ericsson Xperia X8</li><li>Sony Ericsson Xperia X10</li><li>Sprint Hero</li><li>Telus Fascinate</li><li>Toshiba Folio 100</li></ul><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">List diatas adalah hasil uji coba. Jika ponsel anda tidak dapat di list maka silahkan mencoba sendiri. Dan jangan lupa tinggalkan komentar.</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">Cara Root Android Menggunakan SuperOneClick :</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">1. USB Debugging Mode</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"> USB debugging mode harus diaktifkan terlebih dahulu. Caranya :</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">Settings --> Applications --> Development --> USB Debugging</div><div class="separator" style="background-color: #f3f3f3; clear: both; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: center;"><a href="http://3.bp.blogspot.com/-vYjQFQsd9ik/TbVBngAvKtI/AAAAAAAAAEI/E0L9rPeG3Zg/s1600/screenshot.png" imageanchor="1" style="color: #538e08; margin-left: 1em; margin-right: 1em; outline: none; text-decoration: initial;"><img border="0" height="320" src="http://3.bp.blogspot.com/-vYjQFQsd9ik/TbVBngAvKtI/AAAAAAAAAEI/E0L9rPeG3Zg/s320/screenshot.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: none; margin: 0px 4px 0px 0px; padding: 0px;" width="213" /></a></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">2.Ekstrak Super One Click Pada PC. Klik <a href="http://www.win-rar.com/downloads//rar/wrar400.exe" style="color: #538e08; outline: none; text-decoration: initial;">disini</a> untuk mendownload winrar</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">3. Buka Aplikasi Super One Click</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">4. Sambungkan Handphone Pada PC melalui USB</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">5. Klik Root </div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div class="separator" style="background-color: #f3f3f3; clear: both; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: center;"><a href="http://1.bp.blogspot.com/-k6I_SZ2QDFU/TbVEC61aWYI/AAAAAAAAAEM/dqLC9PYkhqk/s1600/super_one_click.png" imageanchor="1" style="color: #538e08; margin-left: 1em; margin-right: 1em; outline: none; text-decoration: initial;"><img border="0" src="http://1.bp.blogspot.com/-k6I_SZ2QDFU/TbVEC61aWYI/AAAAAAAAAEM/dqLC9PYkhqk/s1600/super_one_click.png" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: none; margin: 0px 4px 0px 0px; padding: 0px;" /></a></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">6. Tunggu sebentar, lalu ikuti instruksi-instruksi nya<br />7. Ponsel anda telah di-root.</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">Untuk Unroot Caranya :</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">1. Sambungkan Handphone menggunakan USB</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">2. Klik Unroot</div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;"><br /></div><div style="background-color: #f3f3f3; color: #474747; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 20px; text-align: justify;">Selamat Mencoba, Semoga Berhasil.</div></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-76574496774407508472013-02-22T09:25:00.000-08:002014-02-01T04:52:03.244-08:00Root? apa itu?<div dir="ltr" style="text-align: left;" trbidi="on"><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Bagi para newbie android mungkin bingung setelah mendengar kata-kata 'root'. Nah, dengan maksud inilah saya akan membahas mengenai 'root'. Root yang saya bahas ini adalah root untuk android, bukan untuk yang lain. Oke, langsung saja ke pokok pembahasan</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><u style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;"><b>Pengertian</b></u><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Root adalah suatu system account yang memiliki kekuasaan absolut untuk mengakses dan mengeksekusi semua file, command, system, dalam sistem operasi berbasis linux. Intinya, root ini punya akses tak terbatas yang bisa mengubah, menghapus, menambah, bahkan merusak semua yang ada didalam sistem hape kita. Nge-root artinya nge-hack sistem Handphone supaya kita (user) punya akses ke account root tersebut,jadi kitalah yang punya kekuasaan. </span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><u style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;"><b>Kelebihan Root :</b></u><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><u style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;"><br /></u><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">1. Akses yang tak terbatas terhadap system Android</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Setelah ponsel android anda sudah di-root, maka anda dapat memasuki sistem android. Sehingga anda dapat melakukan kustomisasi pada ponsel android anda. Jadi anda dapat akses untuk membuka sistem android</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">2. Instalasi aplikasi di SD Card</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Untuk meng-install aplikasi di SD Card, user harus memiliki akses root terlebih dahulu. </span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">3. Instalasi aplikasi yang membutuhkan akses root</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Tidak semua aplikasi di Android Market dapat dinikmati secara cuma-cuma maksudnya ada beberapa aplikasi di Android Market yang mengharuskan kita untuk melakukan rooting terlebih dahulu.</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">4. Uninstall aplikasi bawaan vendor</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Aplikasi bawaan vendor tidak dapat dihapus secara normal, harus menggunakan akses root terlebih dahulu untuk menghapusnya.</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">5. Backup App+System</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Dengan akses root kita dapat mem-backup aplikasi dan sistem sesuka kita untuk menghindari hal-hal yang tidak diinginkan</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">6. Dapat menginstall Custom ROM</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Custom ROM adalah sistem operasi Android kustom (alternatif) atau bukan buatan vendor ponsel. Custom ROM dikembangkan oleh komunitas penggemar sistem operasi Android. Tetapi, setelah anda melakukan root terhadap android, bukan berarti bahwa anda dapat langsung menginstall Custom ROM. Terdapat cara-cara untuk menginstall Custom ROM. Setiap ponsel memiliki cara-cara yang berbeda untuk melakukan instalasi Custom ROM</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">7. Akses terhadap file-file system android</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">File-file yang berada di sistem android tidak akan bisa diakses bila user tidak menggunakan akses root terlebih dahulu.</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">8. Overclock processor</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Dengan menggunakan akses root kita dapat meningkatkan performa ponsel android dengan cara Overclock Processo. Dengan melakukan overclock, secara keseluruhan performa ponsel android akan meningkat tetapi daya baterai anda akan cepat terkuras. </span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><u style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;"><b>Kekurangan Root : </b></u><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">1. Dapat menghilangkan garansi</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Garansi akan hilang bila ponsel kita telah di root karena kita telah dianggap merubah sistem bawaan yang telah disediakan vendor. Jadi, kalau kita membawa ponsel android dalam keadaan root ke Sevice Center, tidak akan diterima. Kita harus melakukan proses Unroot terlebih dahulu untuk mendapatkan garansi kembali. Selain unroot, kita dapat mengklaim garansi dengan cara Factory Reset, jadi ponsel anda akan kembali ke settingan pabrikan.</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">2. Masalah Keamanan</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Hal ini adalah hal yang memicu kontroversi. Dengan akses root, virus maupum malware akan dapat masuk ke sistem android untuk merusak maupun mencuri data pengguna. Tetapi, bila sang pembuat virus ini memang benar-benar berniat jahat, tanpa akses root pun virus akan dapat masuk ke sistem aplikasi secara mudah</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">3. Dapat Merusak Sistem</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Dengan akses root, kita dapat mengedit apa yang ada di dalam sistem android, tetapi bila sembarangan meng-edit akan dapat membuat kerusakan sistem. Kerusakan sistem tersebut dapat berupa :</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">a. Tidak stabilnya performa ponsel</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">b. Tidak berfungsinya hardware secara maksimal (bila meng-edit/menghapus file sistem secara sembarangan)</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">c. Yang paling parah ponsel akan mengalami 'Brick'. Bila ponsel terkena brick, ponsel tidak akan dapat menyala</span><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><u style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;"><b>Kesimpulan</b></u><br style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;" /><span style="background-color: #f3f3f3; color: #474747; font-family: Arial, Verdana; font-size: 14px; line-height: 20px;">Root android secara garis besar memberikan efek yang positif yaitu mendapatkan akses ke sistem android, tetapi bila tidak digunakan secara hati-hati ponsel akan kehilangan stabilitasnya, ponsel akan rusak secara firmware. Jadi bila anda sudah merasa cukup puas dengan kemampuan dan fasilitas yang ada diponsel sebaiknyakita tidak perlu melakukan root.</span></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-5379767138233998042013-02-22T09:23:00.000-08:002014-02-01T04:52:03.230-08:00[TUTOR] Unlock Bootloader<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">Pada beberapa smartphone android dari <strong>Sony</strong> (<strong>Sony Ericsson</strong>), istilah Unlock Bootloader rasanya masih jarang kita dengar. Pada kesempatan kali ini kita akan membahas <strong>tutorial Unlock Bootloader</strong> pada smartphone Sony (Sony Ericsson) beserta penjelasannya.</div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><a href="http://blog.fastncheap.com/tutorial-unlock-bootloader-smartphone-android-sony-sony-ericsson/" style="color: #2255aa; text-decoration: initial;"><img alt="" class="aligncenter size-full wp-image-17714" height="327" src="http://blog.fastncheap.com/wp-content/uploads/2012/09/Sony-ericsson-bootloader.jpg" style="border: none; display: block; margin-left: auto; margin-right: auto;" width="625" /></a>Unlock Bootloader sejatinya ialah proses membuang/membuka proteksi pada system os yang terpasang. Tapi dengan mengunlock bootloader, bukan berarti smartphone anda sudah ter root. Karena status Root pada smartphone android dari Sony hanya sebatas pada akses-akses administrator tertentu dan bukan akses penuh seperti tujuan Unlock Bootloader.<span id="more-17702"></span></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">Ada beberapa step yang akan dilalui proses unlock bootloader. Namun sebelumnya anda harus mengetahui <strong>konsekuensi negatif</strong> dari proses melakukan Unlock Bootloader yaitu ;</div><ul style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><li>Garansi akan hangus secara otomatis. Namun ini akan tidak berlaku jika pada saat proses klaim garansi, pihak pabrikan/distributor tidak teliti atau tidak mengecek sama sekali kondisi device anda yang sudah terunlock Bootloader tersebut.</li><li>Smartphone android anda tidak bisa menerima update melalui PC companion atau OTA (over the air) dan beresiko mengalami Brick (mati total karena kegagalan instalasi os).</li></ul><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">Namun pada dasarnya banyak para pengguna smartphone <a href="http://blog.fastncheap.com/android-assistant-aplikasi-gratis-yang-siap-memonitor-gadget-android-anda/" style="color: #2255aa; text-decoration: initial;" title="Android Assistant, Aplikasi Gratis Yang Siap Memonitor Gadget Android Anda">android</a> dari Sony (Sony Ericsson) yang melakukan proses Unlock Bootlader dengan alasan bahwa mereka ingin memodifikasi os yang tertanam pada device mereka dengan harapan bisa lebih fleksibel untuk dimodifikasi, meningkatkan performa dan lain-lain. Beberapa <strong>keuntungan dari Unlock Bootloader</strong> yaitu ;</div><ul style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><li>Bisa memodifikasi os yang terpasang dan menggantinya dengan pilihan custom rom yang disediakan banyak oleh para developer.</li><li>Bisa merubah atau mengganti sistem yang menghubungkan antara hardware dan software yang biasa disebut kernel.</li><li>memasang tema yang sudah dicustom</li><li>memasang Clock Workmod Recovery (CWM).</li></ul><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">Step-step proses Unlock Bootloader ;</div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><strong>A. Proses Registrasi Unlock Bootloader pada Website Sony.</strong></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">1. Download dan instal driver/PC Companion <a href="http://www.mediafire.com/?lt8ghch95u5abgo" style="color: #2255aa; text-decoration: initial;" target="_blank" title="Fasboot File">disini</a> dan ekstrak file fasboot dalam sebuah folder.<br />2. Masuk ke site official Sony untuk Unlock Bootloader <a href="http://unlockbootloader.sonymobile.com/" style="color: #2255aa; text-decoration: initial;" target="_blank" title="Unlock Bootloader Sony">disini</a> dan klik <strong>Start unlocking the boot loader</strong> pada bagian paling bawah.<br />Setelah page web nya terganti, klik<strong> Continue</strong> pada bagian paling bawah<br />3. Lalu klik <strong>Yes I’m Sure</strong></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px; text-align: center;"><strong></strong><a href="http://blog.fastncheap.com/tutorial-unlock-bootloader-smartphone-android-sony-sony-ericsson/" style="color: #2255aa; text-decoration: initial;"><img alt="" class="aligncenter wp-image-17706" height="363" src="http://blog.fastncheap.com/wp-content/uploads/2012/09/Step-1-Unlock-Bootloader1-1024x575.jpg" style="border: none; display: block; margin-left: auto; margin-right: auto;" width="645" /></a></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">4. Pada bagian Legal Terms, Ceklis 2 kolom lalu klik <strong>I accept</strong></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px; text-align: center;"><a href="http://blog.fastncheap.com/tutorial-unlock-bootloader-smartphone-android-sony-sony-ericsson/" style="color: #2255aa; text-decoration: initial;"><img alt="" class="aligncenter wp-image-17708" height="345" src="http://blog.fastncheap.com/wp-content/uploads/2012/09/Step-2-Unlock-Bootloader-1024x575.jpg" style="border: none; display: block; margin-left: auto; margin-right: auto;" width="614" /></a></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">5. Masukan nama, 14 digit imei (1 nomor dibelakang tidak usah ditulis), dan email dan setelah itu klik Submit.</div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px; text-align: center;"><a href="http://blog.fastncheap.com/tutorial-unlock-bootloader-smartphone-android-sony-sony-ericsson/" style="color: #2255aa; text-decoration: initial;"><img alt="" class="aligncenter wp-image-17710" height="345" src="http://blog.fastncheap.com/wp-content/uploads/2012/09/Step-3-Unlock-Bootloader-3-1024x575.jpg" style="border: none; display: block; margin-left: auto; margin-right: auto;" width="614" /></a></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">6. Lalu akan muncul kode key untuk Unlock Bootloader. Catat key tersebut pada Notepad agar tidak hilang.</div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px; text-align: center;"><a href="http://blog.fastncheap.com/tutorial-unlock-bootloader-smartphone-android-sony-sony-ericsson/" style="color: #2255aa; text-decoration: initial;"><img alt="" class="aligncenter wp-image-17711" height="345" src="http://blog.fastncheap.com/wp-content/uploads/2012/09/Step-4-Unlock-Bootloader-1024x575.jpg" style="border: none; display: block; margin-left: auto; margin-right: auto;" width="614" /></a></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><strong>B. Proses Unlock Bootloader</strong></div><ol style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><li>Matikan device Sony anda.</li><li>Tekan <strong>tombol Option</strong> pada device Sony anda sambil sambungkan ke PC</li><li>Jika Pada PC terdapat notifikasi menginstal driver sebaiknya dibiarkan saja.</li><li> lampu led pada device Sony anda terlihat berwarna biru, maka itu artinya driver fastboot sukses terpasang dan device anda sedang berada pada mode fastboot.</li><li>Arahkan mouse ke folder fastboot yg tadi didownload dan sudah diekstrak td. Tekan <strong>shift + klik kanan</strong> mouse anda pada folder fastboot, lalu pilih option<em>“<strong>open command window here</strong>” </em>hingga nanti membuka jendela <strong>CMD.</strong></li><li>Pada CMD yang tadi telah terbuka, ketikan <strong>fastboot.exe -i 0x0fce getvar version</strong></li><li>Setelah itu, ketikan <strong>fastboot.exe -i 0x0fce oem unlock 0x</strong><span style="color: red;">KEY</span><span style="color: #888888;"> </span>(key yang dimaksud adalah kode Unlock Bootloader yang didapat dari proses registrasi Unlock Bootloader di Website Sony)</li><li>Biarkan prosesnya selesai. Jika terlihat tulisan <strong>blocked erased</strong> pada proses tersebut maka smartphone Sony/Sony Ericsson anda sukses Unlock Bootloader</li><li>Setelah itu, cabut device anda dari PC dan copot baterai selama 5 menit lalu nyalakan kembali.</li></ol><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">Proses Unlock Bootloader sangat memerlukan ketelitian dan kehati-hatian. Tulisan di atas adalah implementasi dari pengalaman penulis ketika melakukan Unlock Bootloader yang berakhir sukses. Jika anda sudah mencoba step by step di atas, namun hasilnya berbeda, maka itu bukan bagian dari tanggung jawab penulis.</div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><br /></div><div style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;">Jika anda berani mengambil semua resiko, silahkan anda ikuti petunjuk di atas. Jika anda tidak berani mengambil resiko, lebih baik anda bawa gadget anda ke service center dan jangan pernah ambil resiko untuk melakukan unlock BootLoader sendiri.</div><span style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; font-size: 12px;"><br /></span></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-50634171600961614992013-02-19T08:15:00.000-08:002014-02-01T04:50:15.684-08:00Secure USB debugging in Android 4.2.2It seems we somehow managed to let two months slip by without a single post. Time to get back on track, and the recently unveiled Android maintenance release provides a nice opportunity to jump start things. Official release notes for Android 4.2.2 don't seem to be available at this time, but it made its way into <a href="http://source.android.com/">AOSP</a> quite promptly, so you can easily compile your own changelog based on git log messages. Or, you can simply check the now traditional one over at <a href="http://aosp.changelog.to/JDQ39">Funky Android</a>. As you can see, there are quite a few changes, and if you want a higher level overview your time would probably be better spent reading some of the related <a href="http://www.androidpolice.com/tags/jdq39/">posts</a> by the usual <a href="http://www.androidpolice.com/">suspects</a>. Deviating from our usually somewhat obscure topics, we will focus on a new security feature that is quite visible and has received a fair bit of attention already. It was even <a href="http://android-developers.blogspot.jp/2013/02/security-enhancements-in-jelly-bean.html">introduced</a> on the official <a href="http://android-developers.blogspot.com/">Android Developers Blog</a>, fortunately for us only in brief. As usual, we like to dig a little deeper, so if you are interested in more details about the shiny new secure debugging feature, read on.<br /><h3>Why bother securing debugging?</h3><div>If you have done development in any programming environment, you know that 'debugging' is usually the exact opposite of 'secure'. Debugging typically involves inspecting (and sometimes even changing) internal program state, dumping encrypted communication data to log files, universal root access and other scary, but necessary activities. It is hard enough without having to bother with security, so why further complicate things by making developers jump through security hoops? As it turns out, Android debugging, as provided by the <a href="http://developer.android.com/tools/help/adb.html">Android Debug Bridge</a> (ADB), is quite versatile and gives you almost complete control over a device when enabled. This is, of course, is very welcome if you are developing or testing an application (or the OS itself), but can also be used for other purposes. Before we give an overview of those, here is a (non-exhaustive) list of things ADB lets you do:<br /><ul><li>debug apps running on the device (using <a href="http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html">JWDP</a>)</li><li>install and remove apps</li><li>copy files to and from the device</li><li>execute shell commands on the device</li><li>get the system and apps logs</li></ul>If debugging is enabled on a device, you can do all of the above and more simply by connecting the device to a computer with an USB cable. If you think that's not much of a problem because the device is locked, here's some bad news: you don't have to unlock the device in order to execute ADB commands. And it gets worse -- if the device is rooted (as are many developer devices), you can access and change every single file, including system files and password databases. Of course, that is not the end of it: you don't actually need a computer with development tools in order to do this: another Android device and an <a href="http://en.wikipedia.org/wiki/USB_OTG">OTG</a> USB cable are sufficient. Security researchers, most notably Kyle Osborn, have build <a href="https://github.com/kosborn/p2p-adb">tools</a> (there's even a <a href="https://github.com/x942/p2pgui">GUI</a>) that automate this and try very hard to extract as much data as possible from the device in a very short time. As we mentioned, if the device is rooted all bets are off -- it is trivial to lift all of your credentials, disable or crack the device lock and even log into your Google account(s). But even without root, anything on external storage (SD card) is accessible (for example your precious photos), as are your contacts and text messages. See Kyle's presentations for details and other attack vectors.<br /><br />By now you should be at least concerned about leaving ADB access wide open, so let's see what are some ways to secure it.<br /><h3>Securing ADB</h3></div><div>Despite some innovative attacks, none of the above is particularly new, but it has remained mostly unaddressed, probably because debugging is a developer feature regular users don't even know about. There have been some third-party solutions though, so let's briefly review those before introducing the one implemented in the core OS. Two of the more popular apps that allow you to control USB debugging are <a href="https://play.google.com/store/apps/details?id=com.ramdroid.adbtoggle">ADB Toggle</a> and <a href="https://play.google.com/store/apps/details?id=com.stericson.adbSecure">AdbdSecure</a>. They automatically disable ADB debugging when the device is locked or unplugged, and enable it again when you unlock it or plug in the USB cable. This is generally sufficient protection, but has one major drawback -- starting and stopping the <code>adbd</code> daemon requires root access. If you want to develop and test apps on a device with stock firmware, you still have to disable debugging manually. Root access typically goes hand-in-hand with running custom firmware -- you usually need root access to flash a new ROM version (or at least it makes it much easier) and some of the apps shipping with those ROMs take advantage of root access to give you extra features not available in the stock OS (full backup, tethering, firewalls, etc.). As a result of this, custom ROMs have traditionally shipped with root access enabled (typically in the form of a SUID <code>su</code> binary and an accompanying 'Superuser' app). Thus, once you installed your favourite custom ROM you were automatically 'rooted'. <a href="http://www.cyanogenmod.org/">CyanogenMod</a> (which has over a million users and growing) changed this almost a year ago by disabling root access in their ROMs and giving you the option to enable it for apps only, for ADB of for both. This is not a bad compromise -- you can both run root apps and have ADB enabled without exposing your device too much, and it can be used in combination with an app that automates toggling ADB for even more control. Of course, these solutions don't apply to the majority of Android users -- those running stock OS versions.<br /><br />The first step in making ADB access harder to reach was taken in Android 4.2 which hid the 'Developer options' settings screen, requiring you to use a <a href="http://developer.android.com/tools/device.html#setting-up">secret knock</a> in order to enable it. While this is mildly annoying for developers, it makes sure that most users cannot enable ADB access by accident. This is, of course, only a stop-gap measure, and once you manage to turn USB debugging on, your device is once again vulnerable. A proper solution was introduced in the 4.2.2 maintenance release with the so called 'secure USB debugging' (it was actually commited almost a year ago, but for some reason didn't make it into the original JB release). 'Secure' here refers to the fact that only hosts explicitly authorized by the user can now connect to the <code>adbd</code> daemon on the device and execute debugging commands. Thus if someone tries to connect a device to another one via USB in order to access ADB, they need to first unlock the target device and authorize access from the debug host by clicking 'OK' in the confirmation dialog shown below. You can make your decision persistent by checking the 'Always allow from this computer' and debugging will work just as before, as long as you are on the same machine. One thing to note is that on tablets with multi-user support the confirmation dialog is only shown to the primary (administrator) user, so you will need to switch to it in order to enable debugging. Naturally this 'secure debugging' is only effective if you have a reasonably secure lock screen password in place, but everyone has on of those, right? That's pretty much all you need to know in order to secure your developer device, but if you are interested in how all of this is implemented under the hood, proceed to the next sections. We will first a give a very brief overview of the ADB architecture and then show how it has been extended in order to support authenticated debugging.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-kYKWJ_9TjEo/USN-vQqpUPI/AAAAAAAAL3M/xozI-9JuLDM/s1600/adb-debug-confirmation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="373" src="http://4.bp.blogspot.com/-kYKWJ_9TjEo/USN-vQqpUPI/AAAAAAAAL3M/xozI-9JuLDM/s400/adb-debug-confirmation.png" width="400" /></a></div><br /><h3>ADB overview</h3>The Android Debug Bridge serves two main purposes: it keeps track of all devices (or emulators) connected to a host, and it offers various services to its clients (command line clients, IDEs, etc.). It consists of three main components: the ADB server, the ADB daemon (<code>adbd</code>) and the default command line client (<code>adb</code>). The ADB server runs on the host machine as a background process and decouples clients from the actual devices or emulators. It monitors device connectivity and sets their state appropriately (<code>CONNECTED</code>, <code>OFFLINE</code>, <code>RECOVERY</code>, etc.). The ADB daemon runs on an Android device (or emulator) and provides the actual services client use. It connects to the ADB server through USB or TCP/IP, and receives and process commands from it. Finally, <code>adb</code> is the command line client that lets you send commands to a particular device. In practice it is implemented in the same binary as the ADB server and thus shares much of its code.<br /><br />The client talks to the local ADB server via TCP (typically via <code>localhost:5037</code>) using text based commands, and receives <code>OK</code> or <code>FAIL</code> responses in return. Some commands, like enumerating devices, port forwarding or daemon restart are handled by the local daemon, and some (e.g., shell or log access) naturally require a connection to the target Android device. Device access is generally accomplished by forwarding input and output streams to/from the host. The transport layer that implements this uses simple messages with a 24 byte header and an optional payload to exchange commands and responses. We will not go into further details about those, but will only note the newly added authentication commands in the next section. For more details refer to the protocol description in <code>system/core/adb/protocol.txt</code> and this <a href="http://www.slideshare.net/tetsu.koba/adbandroid-debug-bridge-how-it-works">presentation </a>which features quite a few helpful diagrams and examples.<br /><h3>Secure ADB implementation</h3>The ADB host authentication functionality is enabled by default when the <code>ro.adb.secure</code> system property is set to 1, and there is no way to disable it via the system settings interface (which is a good thing). The device is initially in the <code>OFFLINE</code> state and only goes into the <code>ONLINE</code> state once the host has authenticated. As you may already know, hosts use RSA keys in order to authenticate to the ADB daemon on the device. Authentication is typically a three step process:<br /><ol><li>After a host tries to connect, the device sends and <code>AUTH</code> message of type <code>TOKEN</code> that includes a 20 byte random value (read from <code>/dev/urandom</code>).</li><li>The host responds with a <code>SIGNATURE</code> packet that includes a SHA1withRSA signature of the random token with one of its private keys.</li><li>The device tries to verify the received signature, and if signature verification succeeds, it responds with a <code>CONNECT</code> message and goes into the <code>ONLINE</code> state. If verification fails, either because the signature value doesn't match or because there is no corresponding public key to verify with, the device sends another <code>AUTH TOKEN</code> with a new random value, so that the host can try authenticating again (slowing down if the number of failures goes over a certain threshold).</li></ol>Signature verification typically fails the first time you connect the device to a new host because it doesn't yet have the host key. In that case the host sends its public key in an <code>AUTH RSAPUBLICKEY</code> message. The device takes the MD5 hash of that key and displays it in the 'Allow USB debugging' confirmation dialog. Since <code>adbd</code> is a native daemon, the key needs to be passed to the main Android OS. This is accomplished by simply writing the key to a local socket (aptly named, 'adbd'). When you enable ADB debugging from the developer settings screen, a thread that listens to the 'adbd' socket is started. When it receives a message starting with <code>"PK"</code> it treats it as a public key, parses it, calculates the MD5 hash and displays the confirmation dialog (an activity actually, part of the <code>SystemUI</code> package). If you tap 'OK', it sends a simple simple <code>"OK"</code> response and <code>adbd</code> uses the key to verify the authentication message (otherwise it just stays offline). In case you check the 'Always allow from this computer' checkbox, the public key is written to disk and automatically used for signature verification the next time you connect to the same host. The allow/deny debugging functionality, along with starting/stopping the <code>adbd</code> daemon, is exposed as public methods of the <code>UsbDeviceManager</code> system service.</div><div><br /></div><div>We've described the ADB authentication protocol in some detail, but haven't said much about the actual keys used in the process. Those are 2048-bit RSA keys and are generated by the local ADB server. They are typically stored in <code>$HOME/.android</code> as <code>adbkey</code> and <code>adbkey.pub</code>. On Windows that usually translates to <code>%USERPOFILE%\.android</code>, but keys might end up in <code>C:\Windows\System32\config\systemprofile\.android</code> in some cases (see issue <a href="http://code.google.com/p/android/issues/detail?id=49465">49465</a>). The default key directory can be overridden by setting the <code>ANDROID_SDK_HOME</code> environment variable. If the <code>ADB_VENDOR_KEYS</code> environment variable is set, the directory it points to is also searched for keys. If no keys are found in any of the above locations, a new key pair is generated and saved. On the device, keys are stored in the <code>/data/misc/adb/adb_keys</code> file, and new authorized keys are appended to the same file as you accept them. Read-only 'vendor keys' are stored in the <code>/adb_keys</code> file, but it doesn't seem to exist on current Nexus devices. The private key is in standard OpenSSL PEM format, while the public one consists of the Base 64 encoded key followed by a `user@host` user identifier, separated by space. The user identifier doesn't seem to be used at the moment and is only meaningful on Unix-based OS'es, on Windows it is always 'unknown@unknown'. </div><div><br />While the USB debugging confirmation dialog helpfully displays a key fingerprint to let you verify you are connected to the expected host, the <code>adb</code> client doesn't have a handy command to print the fingerprint of the host key. You might think that there is little room for confusion: after all there is only one cable plugged to a single machine, but if you are running a couple of VMs, thing can get a little fuzzy. Here's one of way of displaying the host key's fingerprint in the same format the confirmation dialog uses (run in <code>$HOME/.android</code> or specify the full path to the public key file):<br /><br /><pre>awk '{print $1}' < adbkey.pub|openssl base64 -A -d -a \<br />|openssl md5 -c|awk '{print $2}'|tr '[:lower:]' '[:upper:]'<br /></pre><br />We've reviewed how secure ADB debugging is implemented and have shown why it is needed, but just to show that all of this solves a real problem, we'll finish off with a screenshot of what a failed ADB attack against an 4.2.2 device from another Android device looks like:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-1qhk4Ck5Nvs/USObO6T_69I/AAAAAAAAL3c/YIr50qWytpw/s1600/p2p-adb-offline.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://3.bp.blogspot.com/-1qhk4Ck5Nvs/USObO6T_69I/AAAAAAAAL3c/YIr50qWytpw/s640/p2p-adb-offline.png" width="360" /></a></div><br /><h3>Summary</h3></div><div>Android 4.2.2 finally adds a means to control USB access to the ADB daemon by requiring debug hosts to be explicitly authorized by the user and added to a whitelist. This helps prevent information extraction via USB which requires only brief physical access and has been demonstrated to be quite effective. While secure debugging is not a feature most users will ever use directly, along with full disk encryption and a good screen lock password, it goes a long way towards making developer devices more secure. </div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-60433410284919347912013-02-18T12:14:00.000-08:002014-02-01T04:52:03.234-08:00Nonton TV di Android<br /><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;">Anda punya perangkat android? Selamat, berarti anda punya perangkat cerdas yang multi talenta. Selain bisa digunakan untuk berkomunikasi, android juga bisa digunakan sebagai perangkat hiburan, mulai dari game, memutar musik dan film, sampai menonton TV loh. Jadi anda tidak perlu lagi membeli perangkat pemutar musik, film bahkan TV. Cukup dengan memanfaatkan fitur dan aplikasi yang ada di Android anda saja anda sudah dapat menikmati itu semua.</div><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;"><strong>Cara menonton TV di android</strong> cukup mudah, tinggal download aja <strong>aplikasi gratis untuk nonton TV di android</strong> yang ada di Play Store. Banyak sekali aplikasi yang bisa anda gunakan untuk <strong>menonton TV di android</strong>. Hampir semua aplikasi itu menggunakan jalur streaming dengan memanfaatkan koneksi data internet untuk menampilkan siaran TV nya.</div><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;">Silakan anda cari aplikasinya di Play Store dengan keyword “<em>Indo TV</em>“. Pilih dan download salah satu aplikasi nya. Sebelum anda jalankan aplikasinya pastikan android nya sudah konek ke internet baik via koneksi data maupun koneksi wifi. Jika anda menggunakan koneksi data maka pastikan anda sudah berlangganan paket internet dari operator, karena jika tidak maka pulsa anda akan tersedot. Lebih aman jika menggunakan wifi karena pulsa anda tidak akan terpotong dan baterai android nya akan lebih tahan lama. Jika anda punya koneksi internet dari modem menggunakan laptop, anda bisa membagi koneksi nya ke android anda menggunakan cara ini <a href="http://androidkita.com/tips-trick/cara-mudah-sharing-koneksi-internet-dari-pc-ke-android/" target="_blank" title="Cara Mudah Sharing Koneksi Internet dari Modem PC ke Android">(Cara mudah sharing koneksi Internet dari Modem PC ke Android</a>).</div><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;">Oke, kalo masalah koneksi udah beres sekarang tinggal jalankan aja aplikasinya.</div><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;"><img alt="13573804051135483775" class="aligncenter size-full wp-image-218472" height="400" src="http://stat.ks.kidsklik.com/statics/files/2013/01/13573804051135483775.jpg" style="display: block; margin-left: auto; margin-right: auto; max-width: 600px;" title="13573804051135483775" width="240" /></div><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;">Pilih channel TV yang sobat suka, tunggu sebentar sampe proses buffering selesai.</div><div style="background-color: white; font-family: Arial, Helvetica, sans-serif; text-align: justify;"><img alt="13573804511752282508" class="aligncenter size-full wp-image-218473" height="288" src="http://stat.ks.kidsklik.com/statics/files/2013/01/13573804511752282508.jpg" style="display: block; margin-left: auto; margin-right: auto; max-width: 600px;" title="13573804511752282508" width="480" /></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-22035314791756240552013-02-18T12:11:00.000-08:002014-02-01T04:52:03.211-08:00Menjalankan Windows di Android<br /><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Untuk menjalankan windows pada android memerlukan emulator, beberapa diantaranya adalah Qemu dan Bochs. Seperti layaknya emulator pasti memerlukan image agar aplikasi dapat berjalan, begitu juga dengan Qemu dan Bochs yang memerlukan image file juga.</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="color: red; font-family: Verdana, sans-serif;"><b>Qemu vs Bochs</b></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Qemu adalah emulator yang sangat cepat, tetapi mempunyai bug. SB16 emulasi bekerja, tetapi ada musik MIDI. Emulasi FPU tidak benar / tidak lengkap, sehingga dapat menyebabkan beberapa program untuk tidak menjalankan atau tidak berjalan sempurna. Jaringan tidak bekerja. Keyboard / mouse emulasi masih jauh dari sempurna.Windows 9x akan bekerja di QEMU jika anda akan menonaktifkan driver 32-bit disk di dalamnya. Ini adalah bug di Android (pread / pwrite fungsi tidak bekerja). Windows 9x akan berjalan dengan kecepatan sangat cepat.</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Bochs merupakan emulatoru yang terlalu lambat untuk bisa digunakan, namun bochs sangat stabil dibanding dengan menggunakan qemu.</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="color: red; font-family: Verdana, sans-serif;"><b>Cara install windows pada android</b></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">Pada artikel ini akan dibahas windows 95 pada android, namun bisa saja windows 98 atau xp, namun mengingat tidak semua pembaca maxiandroid menggunakan HH dengan spec yang tinggi maka saya memutuskan untuk windows 95.</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><div class="separator" style="clear: both; line-height: 1.3em; text-align: center;"><a href="http://adf.ly/176572/http://1.bp.blogspot.com/-3-ecC1oSSRA/T8i81RuxA-I/AAAAAAAAA5E/uwrTe9zIOCc/s1600/android-windows.jpg" imageanchor="1" style="color: #0066ff; margin-left: 1em; margin-right: 1em; text-decoration: initial;"><img border="0" height="216" src="http://1.bp.blogspot.com/-3-ecC1oSSRA/T8i81RuxA-I/AAAAAAAAA5E/uwrTe9zIOCc/s320/android-windows.jpg" style="border: 0px solid rgb(204, 204, 204); padding: 2px;" width="320" /></a></div><div class="separator" style="clear: both; line-height: 1.3em; text-align: center;"><br /></div><span style="font-family: Verdana, sans-serif;"><b>Bagaimana menginstal windows 95 untuk sebuah android</b></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">1.Download file qemu95eng </span><a href="http://adf.ly/9E6lO" rel="nofollow" style="color: #0066ff; font-family: Verdana, sans-serif; text-decoration: initial;">di sini</a><span style="font-family: Verdana, sans-serif;">.</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">2.Cari folder "SDL" kemudian pindahkan pada root /sdcard. (di dalam folder tersebut terdapat file .apk yang harus anda install)</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">3.Install file "SDLapp.apk" yang berada di dalam folder "SDL". </span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">4.Pilih dan jalankan "libSDL" yang telah anda install tadi.</span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">5.Tunggu beberapa saat untuk booting windows 95. </span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;">6.Windows 95 akan berjalan pada android anda.</span><br /><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: center;"><iframe allowfullscreen="" frameborder="0" height="206" src="http://www.youtube.com/embed/O6xbah7hvrU" width="275"></iframe></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><br /></div><div style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="color: red; font-family: Verdana, sans-serif;"><b>Catatan:</b></span></div><blockquote class="tr_bq" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; margin: 1em 20px;"><div style="line-height: 1.3em; text-align: justify;"><span style="font-family: Verdana, sans-serif;">-Artikel ini telah ditest oleh teman saya, namun saya belum melakukan testing!!!</span> </div></blockquote><blockquote class="tr_bq" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; margin: 1em 20px;"><span style="font-family: Verdana, sans-serif;"></span><br /><div style="line-height: 1.3em; text-align: justify;"><span style="font-family: Verdana, sans-serif;">-Artikel ini menggunakan referensi dari beberapa forum besar diantaranya XDA yang dapat anda baca <a href="http://adf.ly/176572/http://forum.xda-developers.com/showthread.php?t=694105" style="color: #0066ff; text-decoration: initial;">di sini</a> dan <a href="http://adf.ly/176572/http://forum.xda-developers.com/showthread.php?p=6661598" style="color: #0066ff; text-decoration: initial;">di sini</a>. </span></div><span style="font-family: Verdana, sans-serif;"></span></blockquote><blockquote class="tr_bq" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 16.890625px; margin: 1em 20px;"><span style="font-family: Verdana, sans-serif;"></span><br /><div style="line-height: 1.3em; text-align: justify;"><span style="font-family: Verdana, sans-serif;">-Dalam referensi dikatakan oleh developer bahwa pada emulator ini mempunyai beberapa bug. </span></div></blockquote><br /><a href="http://maxiandroid.blogspot.com/2012/06/install-windows-pada-android.html">sumber </a>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-39172336626079143142013-02-18T12:09:00.000-08:002014-02-01T04:52:03.222-08:00Menjalankan Ubuntu di Android<br /><div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;"><span style="font-size: 11px; line-height: 16.5px;"><b><br /></b></span></span></div><div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;"><span style="font-size: 11px; line-height: 16.5px;"><b><br /></b></span></span></div><div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;"><span style="font-size: 11px; line-height: 16.5px;"><b><br /></b></span></span></div><div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;"><span style="font-size: 11px; line-height: 16.5px;"><b>Cara - Caranya :</b></span></span></div><div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;"><span style="font-size: 11px; line-height: 16.5px;"><b><br /></b></span></span></div><div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline: none; padding: 0px; text-align: justify;"></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 1</strong> : download ubuntu.zip (jangan khawatir hanya sekitar 600mbs) http://min.us/myxFtl9Vu </div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 2</strong> : ekstrak file zip</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 3</strong> : Hubungkan tablet Anda ke komputer Anda. (Honeycomb menggunakan MTP, jadi jika Anda menjalankan windows Anda tidak harus memiliki masalah mengakses memori internal, jika Anda menjalankan mac atau linux ... Anda mungkin perlu mencari cara alternatif)</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 4</strong> : Pindahkan "installbusybox.sh" file dan "busybox" dari folder ubuntu ke akar memori internal Anda. (Jika Anda tahu Anda sudah memiliki busybox terinstal, anda dapat melewatkan langkah ini)</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 5</strong> : Transfer sisa folder ubuntu ke memori internal Anda.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Oke sekarang saatnya untuk mendapatkan tangan Anda kotor.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 6</strong> : Buka command prompt pada komputer Anda</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 7</strong> : Jika Anda tidak memiliki adb sudah terinstal, Anda ingin "cd" ke direktori yang Anda membuka ritsleting folder ubuntu karena mengandung "adb.exe" EX. "Download cd" Jika Anda sudah memiliki adb terinstal, lewati langkah ini.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 8</strong> : Sekarang saatnya untuk menginstal busybox. Sekali lagi, jika Anda tahu Anda sudah memiliki busybox diinstal loncat langkah ini. Ketik "perangkat adb" jika perangkat Anda tidak datang, itu berarti yang tidak terhubung, dan kemungkinan Anda perlu menginstal driver. Sekarang ketik:</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Adb shell</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Su</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Cd / sdcard /</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Sh installbusybox.sh</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">(Jika ia mengatakan sudah ada, maka itu tidak apa-apa)</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 9</strong> : Sekarang saatnya untuk mendapatkan ubuntu benar-benar berjalan. Type:</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Cd / sdcard / ubuntu</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Sh ubuntu.sh</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Bootubuntu</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Selamat anda sekarang berada di ubuntu.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 10</strong> : Sekarang kita perlu memperbarui paket, tapi mereka keluar dari tanggal, jadi kita perlu menggunakan ini bekerja pintar sekitar. (Terima kasih kepada Zedomax untuk yang satu ini) Type:</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Cat> etc / apt / sources.list</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">deb http://old-releases.ubuntu.com/ubuntu/ karma semesta utama</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Kemudian menekan tombol control D dua kali untuk membawa Anda kembali ke host lokal.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Akhirnya ketik:</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">apt-get update</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Ini akan memperbarui. Terakhir adalah untuk masuk ke vncserver sendiri.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><strong>Langkah 11</strong> : Type</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">apt-get install tightvncserver</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">PENGGUNA ekspor = root</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">vncserver-geometry 1280x800</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><br /></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Ini kemudian akan meminta Anda untuk membuat password. Anda dapat membuat itu, dan voila! Anda sudah selesai.</div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;">Pada tablet Anda masuk ke android vnc (Anda dapat men-download dari pasar) julukan bisa apa saja yang Anda inginkan. Password adalah password yang Anda buat. Alamat localhost. Dan port 5901.Kemudian klik menghubungkan dan itu ada. <span class="">Boom!!</span></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span class=""><br /></span></div><div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16.5px; margin: 0px; outline: none; padding: 0px; text-align: justify;"><span class=""><a href="https://www.facebook.com/note.php?note_id=274644562591323">sumber</a></span></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.comtag:blogger.com,1999:blog-5669108262135509516.post-73196469044606657472013-02-15T14:35:00.000-08:002014-02-01T04:52:03.242-08:00Istilah di Android<br /><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>APK</b> = Android Package, kyk IPA di iPhone (buat pngguna iPhone), SIS dan SISx di Symbian s60 (saya kurang begitu tahu, skrg masih menggunakan extensi sis atau tidak), atau JAR di BB (buat pengguna BB) dan java based devices lainnya. Intinya,file2 dgn ekstensi .apk bisa digunakan untuk menginstall aplikasi di android device.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b><br /></b><b>Adb</b> = command buat menjembatani perintah di android lewat pc, kalau adb shell termasuk bagiannya..extensi command adb ada banyak, seperti adb push, adb pull, adb install dll,<br />Syarat adb bisa jalan = driver adb mesti sdh terpasang di pc, biasanya di device manager (windows) akan terlihat andoid adb composite device, driver adb biasanya dari vendor pembuat devicenya..klo nexus,htc magic, dream bisa pakai driver bawaan usb...kalo motorola milestone bisa dari cd bawaannya atau pakai motorola software update.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Adb.exe</b> = bisa di ambil dari sdk (dah include didlm android sdk)..ada di folder tools, untuk mengetahui fungsi command adb bisa dgn mengetik "adb help"<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Adb shell logcat</b> = buat mengetahui proses yg terjadi diandroid, berguna banget saat experiment flashing rom.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><b>Augmented Reality</b> = teknologi yang menggabungkan benda maya dua dimensi dan ataupun tiga dimensi ke dalam sebuah lingkungan nyata tiga dimensi lalu memproyeksikan benda-benda maya tersebut dalam waktu nyata. Tidak seperti realitas maya yang sepenuhnya menggantikan kenyataan, namun Augmented Reality hanya menambahkan atau melengkapi kenyataan.<br /><br />Benda-benda maya menampilkan informasi yang tidak dapat diterima oleh pengguna dengan inderanya sendiri. Hal ini membuat Augmented Reality sesuai sebagai alat untuk membantu persepsi dan interaksi penggunanya dengan dunia nyata. Informasi yang ditampilkan oleh benda maya membantu pengguna melaksanakan kegiatan-kegiatan dalam dunia nyata.<br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Apps2SD</b> = Proses memindahkan/menyimpan aplikasi ke SDcard selain ke memori internal.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>AOSP</b> = Android Open Source Project,<o:p></o:p>Ini adalah nama kode yang diberikan google untuk rilis Android yang berbeda. Keterangan dengan contoh berikut mungkin akan lebih jelas. Misal, google merilis HP Android NEXUS dan menggunakan ROM asli yang dikembangkan oleh google sendiri. Kemudian Samsung, HTC, LG menggunakan kode AOSP Android tadi dan melakukan modifikasi sesuai keperluan mereka. Modifikasi bisa dilakukan di interface dan tampilan contohnya Samsung Touchwiz, HTC Sense, Motorola motoblurr dan lain-lain. CyanogenMod adalah contoh custom ROM berdasarakan kode AOSP google.<br /><br /><b>Beta</b> = Sebuah versi percobaan, yang berarti INI BELUM SEMPURNA</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Boot</b> = Proses menghidupkan handheld.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Bootloader</b> = gabungan SPL dan IPL yg menjadi dasar dr sebuah device.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Bootloader Mode - FASTBOOT load</b> = Tombol Camera + Power, pada mode boot ini, kita bisa meng-install image sebuah sistem yang ada/ditaruh di SDcard dengan menekan tombol Power lagi.<br /><br /><br /><b>BootLoop</b> = device melakukan boot terus menerus (berulang-ulang) / terjebak di bootanimation, tidak dapat masuk ke OS. Akibat kesalahan flashing atau ada file milik system yang tidak berjalan dengan baik.<br /><br /><br /><o:p></o:p><b>Busybox</b> = sebuah toolbox yang popular dengan linux commands seperti contohnya: cp, mv, dan lainnya. Hanya dapat digunakan pada HH yang sudah memiliki hak akses administrator atau “rooted” Android phone. (Kayak semacam bentuk perintah)</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>BW</b> = bandwidth<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><br /><b>BWK</b> = bandwidth killer (istilah ini digunakan ketika menjalankan aplikasi yang bersifat online dan menyedot pemakaian bandwidth yang sangat besar)<br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>BRICK(ed)</b> = kondisi dmana device sudah tidak bisa di-recover,sehingga bisa dianggap seperti batu-bata (brick) yg dapat digunakanuntuk ngelempar anjing (kalau dbutuhkan)..<o:p></o:p><br /><br /><br /><b>BSOD</b> = Blue screen of death</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Cache2SD </b>= Proses memindahkan/menyimpan Cache dari ROM ke SDcard.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;"><b><br /></b><br /><b>CIF</b> = Common Intermediate Format, adalah format standar resolusi photo/video yang menunjukan ukuran horizontal dan vertikal dalam besaran pixel.<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm 0cm 0.0001pt;"><span style="font-family: Verdana, sans-serif;">Turunan dari CIF adalah :<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;">SQCIF (Sub Quarter CIF) = 128 x 96<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;">QCIF (Quarter CIF) = 176 x 144<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;">CIF = 352 x 288<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;">4CIF (4x CIF) = 704 x 576<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;">16CIF (16x CIF) = 1408 x 1152<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;">DCIF (Double CIF) = 528 x 384<o:p></o:p></span></div><div style="line-height: 1.3em; margin: 0cm;"><span style="font-family: Verdana, sans-serif;"><br class="Apple-interchange-newline" /></span></div></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Cupcake ( kue mangkok )</b> = Google internal code name for the Android OS version 1.5.<o:p></o:p><br /><br /><br /><b>CPU</b> = merupakan singkatan dari Central Processing Unit atau Unit Pengolah Pusat. Secara awam, kita sering menyebutnya sebagai prosesor.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>CWM (Clock Work Mod)</b> = alat pengganti default android recovery yang digunakan untuk install costum rom, dan memiliki fitur backup, Aplikasi ini asalnya dibuat oleh Koush, untuk mengatur ROM di hp Android. Banyak kegunaan CWW ini salah satunya untuk membackup dan restore aplikasi, menghapus (wipe) data di sistem dan di cache (Dalvik). Biasanya diperlukan untuk menginstall (flashing) ROM baru, menjalankan atau mematikan Lagfix dari kernel Voodoo dsb.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>CM</b> = Cyanogen Mod, developer yang memodifikasi ROM<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Dalvik</b> = Nama khusus di Android untuk program Java virtual Machine (VM) yang menjalankan perintah kode aplikasi android. Setiap aplikasi berjalan di Dalvik VM dan tidak berpengaruh secara langsung ke sistem operasi Android. Jika misal satu aplikasi 'rusak', maka hanya VM dimana Dalvik untuk aplikasi itu yang tidak berfungsi.<br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Diagnostic Mode </b>= Tombol Capture + Power. mode boot untuk test ( pake tombol volume untuk pilih item ).<br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Donut ( Donat )</b> = Google internal code name for the Android OS version 1.6.<o:p></o:p><br /><br /><b>Deodex</b> = Proses Deodexing singkatnya adalah proses pengepakan kembali APK dengan ODEX dengan cara tertentu. Proses pengepakan ini akan menjadi file dengan CLASSES.DEX. Dengan melakukan DeOdexing, semua paket dari APK yang sebelumnya terpisah di satukan kembali di satu file APK, sehingga menghilangkan kecemasan bahwa APK yang dimodifikasi akan konflik dengan beberapa file ODEX.Dengan kata laen, ROM yang telah DeODEXed, memiliki paket aplikasi yang telah di jadikan satu kembali dalam satu file APK, sehingga mengijinkan modifikasi pada file APK seperti perubahan THEMA. Karena tidak ada kode/bagian paket aplikasi yang lokasinya berbeda maka integritas paket tetap terjaga.<br /></span><div style="line-height: 1.3em;"><span style="font-family: Verdana, sans-serif;"><b>Download Mode</b> = Satu proses yang biasa dilakukan untuk flashing ROM menggunakan Odin. Tekan Volume bawah + Home + Power sampai layar 'Download Mode' (warna kuning) muncul. Konek kabel USB ke komputer dan buka Odin. Di Window Odin akan ada satu kotak yang menandakan Odin telah mengenali hanphone dan siap untuk proses flashing. Gambar bisa dilihat di bawah ini.<br /></span></div></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Eclair</b> = Google internal code name for the Android OS version 2.0 dan 2.1.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><br /><b>Ext2 / Ext3 /Ext4</b> = Format partisi pada linux,seperti layaknya FAT32 dan NTFS pada windows.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Froyo ( Frozen Youghurt - Youghurt beku ) </b>= Google internal code name for the Android OS vesion 2.2.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Fastboot </b>= Tool yg digunakan untuk mem-flash image sistem ke handheld dr komputer.<o:p></o:p></span></div><div class="MsoNormal" style="background-color: white; font-size: 13px; line-height: 16.890625px; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><br /><br /><b>Firmware</b> = software bawaan dari suatu alat digital, misal hape, psp dll<br /><br /><b>Flash</b> = Istilah yang hampir sama dengan Flash adalah instal tapi sebenarnya tidak sama. Proses flash akan mentransfer data ROM, Kernel, Recovery atau paket firmware ke dalam internal ROM di android.<br /><br /><br /><b>Framework</b> : tampilan-tampilan dasar pada firmware, seperti battery bar, signal bar, notification bar.<br /><br /><br /><b>Gal ***</b> = Singkatan dari HH Android keluaran samsung, contoh: Galmin untuk Galaxy Mini, Gal Note untuk Galaxy Note<br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>GUI</b> = Graphical User Interface, interface aplikasi yang lebih bersifat graphic (gambar)<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>GPU</b> = Graphics Processing Unit ,<span class="apple-converted-space"> </span>sebuah prossesor khusus untuk untuk bagian grafis 3D dari microprocessor. Alat ini digunakan di sistem benam, telepon genggam, komputer pribadis, workstation, dan konsol game. GPU Moderen sangat efisien dalam memanipulasi komputer grafis dan struktur paralel, membuatnya lebih efektif dari fungsi umum CPU yang di gunakan untuk bebagai perhitungan alogaritma. Pada komputer pribadi (PC), GPU biasanya terdapat di video card atau dimotherboard. Lebih dari komputer desktop dan notebook mempunyai GPU yang terintegrasi, yang biasanya jauh daripada yang ada di video card.<o:p></o:p></span></div><div class="MsoNormal" style="background-color: white; font-size: 13px; line-height: 16.890625px; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>GMS</b> = Google Market Services, tempat download nya aplikasi2 di Android (kayak apps store di iphone, appworld di BB)<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>GPS</b><span class="apple-converted-space"><b> (</b></span><b> Global Positioning System)</b> = sistem penentuan lokasi berdasarkan sinyal satelit yang akan menghasilkan informasi berupa koordinat, latitude dan lokasi dalam peta. Dibutuhkan 3 komponen dalam penentuan lokasi yaitu satelit, receiver GPS dan posisi yang bebas halangan.<o:p></o:p></span></div><div class="MsoNormal" style="background-color: white; font-size: 13px; line-height: 16.890625px; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Honeycomb</b> = Google internal code name for the Android OS vesion 3.0, biasa dgunakan untuk tablet<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>HH (HandHeld)</b> = Sebuah peralatan bergerak, juga dikenal sebagai peralatan telepon genggam, peralatan genggam,komputer genggam, <i>palmtop</i> atau hanya alat genggam — adalah sebuah peralatan komputer seukuran kantong, yang memiliki layar tampilan dengan masukan sentuhan atau papan ketik mini. Untuk <i>personal digital assistant (PDA)</i> masukan dan keluaran digabungkan ke dalam sebuah antarmuka layar sentuh. Telepon pintar (<i>Smartphone</i>) dan PDA sangat populer di antara orang-orang yang membutuhkan bantuan dan kenyamanan komputer konvensional. Enterprise digital assistant dapat memperluas fungsi yang tersedia untuk pengguna bisnis dengan menawarkan layanan pengambilan data terintegrasi seperti pembaca <i>BarCode</i>, RFID, dan <i>Smart Card</i>.<o:p></o:p></span></div><div class="MsoNormal" style="background-color: white; font-size: 13px; line-height: 16.890625px; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>IMAP</b> = Internet Message Access Protocol, salah satu protocol untuk retreive email selain POP3.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>ICS (Ice Cream Sandwich)</b> = Google internal code name for the Android OS vesion 4.0, OS yg dlengkapi dengan face lock.apk.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Install</b> = Memasang aplikasi tersebut pada system.<br /><br /><br /><b>Jit(just in time)</b> = dalam android jit semacam tweaking agar CPU dan I/O device dapat bekerja maksimal</span><div style="line-height: 1.3em;"><span style="font-family: Verdana, sans-serif;"><br /></span></div></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Jellybean</b><b> =</b> Google internal code name for the Android OS vesion 5.0.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><br /><b>Kernel</b> = Fungsi Kernel adalah sebagai jembatan antara Operating System (OS) dan hardware. Dengan kata lain, kernel berfungsi sebagai penghubung antara sofware dengan hardware.Dalam konteks hanphone Android, kernel juga menyimpan informasi driver untuk hardware. Oleh karenanya Kernel bisa diganti dengan proses flashing untuk meningkatkan performa hardware Android, misalnya overclock, memaksimalkan kemampuan suara, grafis dan lain-lain.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b><br /></b><br /><b>Maemo</b> = jenis operating system N900 yang ditanamkan oleh nokia, OS nya salah satu distro nya Linux.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Miley</b> = julukan untuk Milestone,salah satu android rakitan nya Motorola.<b><o:p></o:p></b></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>NAND</b> : Tipe flash memory yang digunakan di handheld, The type of flash memory that is used in the HTC Dream, istilah ini biasanya digunakan menggantikan istilah ROM,<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Nandroid</b> : utility yg dipake buat bikin image untuk backup maupun restore.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><br /><b>NAND Backup</b> = Proses mengkopi sistem (yang di Android disebut sebagai 'Image') termasuk informasi partisi OS di Android. Proses ini TIDAK membackup Kernel dan sistem Recovery.<br /><br /><b>Normal Mode</b> : cara normal menghidupkan handheld.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /><b>N900 </b>= seri nokia 900 (untuk nokia seri ini dapat diinstall android sebagai OS dari pihak ketiga)<br /><br /><br /><b>N1/</b><b>Nexus One</b> = google phone pertama yang berbasis android dibuat oleh HTC</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>OTA (Over The Air)</b> = Over The Air, suatu metode pengiriminan data, Update yang resmi disediakan oleh penyedia atau pembuat handphone langsung ke pemakai. Dengan OTA ini HP kamu bisa mengetahui jika ada update terbaru seperti: Firmware, Profile, PRL (Profile Roaming List) dan Android. Proses update OTA biasanya berlaku untuk stock ROM saja. Jika HP kamu sudah DIROOT disarankan untuk JANGAN MELAKUKAN UPDATE MELAUI OTA. Sebagian besar pemakai yang sudah meroot HP melaporkan ada masalah seperti: bootloop, hang dan bahkan nge-brick. Biasanya istilah dipake pd aktifitas meng-update (istilah lainna mgkn download),<br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Odex</b> = Dalam file sisten Android, aplikasi berbentuk paket dengan extensi APK. Paket aplikasi atau APK ini mempunyai file ODEX yang fungsi sebenarnya adalah untuk menghemat ruang penyimpanan. File ODEX ini sebenernya koleksi dari bagian dari aplikasi yang di optimalkan sebelum proses boot. Dengan begitu, adanya file ODEX akan mempercepat proses BOOT karena meload bagian dari aplikasi2 yang ada. Di sisi lain, adanya ODEX mempersulit proses hacking terhadap APK, karena beberapa bagian dari APK telah di extract dan berada di lokasi yang laen sebelum di eksekusi.<br /><br /><br /><br /><b>Partisi</b> = Membagi memori external membagi bebrapa bagian.<br /><br /><b><br /></b><br /><b>POP3</b> = Post Office Protocol 3, salah satu protocol TCP/IP port 110 dalam menarik email.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Robot ijo</b> = julukan nya untuk android , karena logo nya android berbentuk robot dan warna nya hijau *cmiiw*</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Ratjoen/racun</b> = godaan yang disebarkan oknum terhadap salah satu product.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Root</b> = super user di salah OS (dalam hal ini Android) dan <b>nge-root</b> = proses untuk merubah privilage dari user biasa jadi root.<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Recovery Mode</b> = Tombol Home + Power, pada mode boot ini, kita bisa membuka shell..mem-flash image..bikin Backup maupun Restore. Teken Call + Menu + Power beberapa kali untuk keluar dr mode ini,<o:p></o:p></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Resolusi</b> = Jumlah pixel per satuan panjang citra, biasa dng satuan dpi (dot per inch) pixel, unt konversi dcontohkan 300 dpi pixel = 1/300 inches = 1/300*2.54 cm = 0.00847 cm<o:p></o:p></span></div><span style="font-family: Verdana, sans-serif;"><br style="background-color: white; font-size: 13px; line-height: 16.890625px;" /></span><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><span style="font-family: Verdana, sans-serif;"><br style="background-color: white; font-size: 13px; line-height: 16.890625px;" /></span><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><span style="outline: 0px;"><b>ROM</b> = Read Only Memory, suatu area dari flash memory yang tidak bisa </span><span style="outline: 0px;">"ditulis/diisi", </span>biasanya digunakan dalam memory komputer (tempat BIOS) yg tidak membutuhkan power untuk menyimpen data. Dalam handphone (Android), ROM disini adalah internal memory tempat OS (Android) disimpan. Jadi ROM untuk handphone Android bisa dikatakan tempat/daya tampung OS dan kadang langsung diidentikkan dengan versi OS itu sendiri. Proses flash ROM akan mengganti total OS di Android dan kadan termasuk Kernel dan Recovery mode.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br />Secara resmi (Stock) ROM terdiri dari 3 komponen: OS, Kernel dan Recovery dan beberapa aplikasi yang terintegrasi untuk menjalankan Android. ROM yang dibuat bukan oleh Google biasanya dinamakan Custom ROM dan tentunya berasal dari Stock ROM yang dimodifikasi.Orang yang membuat Custom ROM bisa memasukkan Kernel (Stock atau Custom), Recovery (Stock atau Custom), aplikasi tambahan tergantung pembuatnya.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="outline: 0px;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>RAM</b> = Random access memory, adalah sebuah tipe penyimpanan komputer yang isinya dapat diakses dalam waktu yang tetap tidak memperdulikan letak data tersebut dalam memori. Ini berlawanan dengan <i>alat memori urut</i>, seperti tape magnetik, disk dan drum, di mana gerakan mekanikal dari media penyimpanan memaksa komputer untuk mengakses data secara berurutan.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm 0cm 0.0001pt; text-align: justify;"><span style="outline: 0px;"><span style="font-family: Verdana, sans-serif;"><b>Safe Mode</b> = Tombol Menu + Power, boot handheld secara normal tetapi tanpa registrasi dengan Google, makana aplikasi2 yg berhubungan denganna gk bakalan berfungsi ( Map, Gmail account, Market, dll).<o:p></o:p></span></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="outline: 0px;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>SPL </b>= Secondary Program Loader (mirip kaya BIOS - Basic Input Output System ), bagian kedua terdiri dari bootloader.</span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="outline: 0px;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><span style="outline: 0px;"><b>Screen Capture/SS (Screen Shoot)</b> = </span>Istilah dalam android untuk mengambil gambar/screen shot yang diinginkan biasa mengunakan aplikasi pihak ketiga atau tombol home dan power.</span></div><div class="MsoNormal" style="background-color: white; font-size: 13px; line-height: 16.890625px; margin-bottom: 0.0001pt; text-align: justify;"><span style="outline: 0px;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><span style="outline: 0px;"><b>Swap</b> = mempermudah kinerja RAM (bukan menambah RAM), jd tidak akan ada peningkatan pada hasil benchmark DLL. P</span><span style="text-align: -webkit-auto;">ada umumnya ini di gunakan pada hp dgn RAM rendah </span><span style="text-align: -webkit-auto;">(contoh RAM 128/256) untuk supaya bisa menjalan kan lebih banyak app (multi</span><span style="text-align: -webkit-auto;">tasking) sedangkan untuk DS RAM 512 jumlah ini sudah cukup untuk menjalankan </span>multitasking di froyo 2,2 (mungkin tidak akan cukup di honeycomp 3.0) tp kita masih dapet menggunakan swap di DS supaya kinerja RAM menjadi ringan (dgn anggapan bisa menghemat tenaga batere) kecepatan sdcard class 6 boleh di bilang sama dgn kecepatan internal memory, jd pada saat system menggunakan swap yg tersedia tidak akan ada lag.<br /><br /><br /><b>Tweak</b> = sebuah fasilitas (utility) yang tersedia pada sistem operasi atau proses yang dapat mengoptimalisasikan kinerja sistem operasi.<br /><span class="apple-converted-space"><br /></span><br /><b>Wipe data/factory reset</b> = sama seperti factory reset<br /><br /><br /><b>Wipe cache partition</b> = menghapus partisi pada SDCard </span></div><span style="font-family: Verdana, sans-serif;"><span style="background-color: white; font-size: 13px; line-height: 16.890625px;"></span><br style="background-color: white; font-size: 13px; line-height: 16.890625px;" /></span><div style="background-color: white; font-size: 13px; line-height: 16.890625px; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><span style="font-family: Verdana, sans-serif;"><br style="background-color: white; font-size: 13px; line-height: 16.890625px;" /></span><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>Widget</b> = salah satu aplikasi yang GUI nya lebih bersifat interaktif<o:p></o:p></span></div><div class="MsoNormal" style="background-color: white; font-size: 13px; line-height: 16.890625px; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><br /></span></div><div style="background-color: white; font-size: 13px; line-height: 16.890625px; margin: 0cm; text-align: justify;"><span style="font-family: Verdana, sans-serif;"><b>VGA</b> = Video Graphics Array, adalah<br />standar resolusi grafik (photo/video) yang lebih baru yang diperkenalkan oleh<br />IBM. Ukuran standar VGA adalah 640 x 480 pixel.</span></div>modal kerenhttp://www.blogger.com/profile/16698602585089755007noreply@blogger.com