Friday 28 March 2014

Understanding MRAID


MRAID is an industry standard API for rich media ads running in mobile applications (http://www.iab.net/mraid). It provides banner ads with a standard way to expand/collapse banners and handle other situations that are not possible in a mobile application environment.

Inheritance







mraid
 

Constructor

mraid()

Instance Methods

Defined in mraid

close()
Downgrades the state of the ad. It will also fire the stateChange event.
  • For ads in an expanded state, close causes the StateType to transition to the default state.
  • This method may be used by ad designers as an addition to the SDK-enforced close ability.

Enumerations

Mobile Rich Media Ad Interface Definitions (MRAID)

MRAID, or “Mobile Rich Media Ad Interface Definitions” is the IAB Mobile Marketing Center of Excellence’s project to define a common API (Application Programming Interface) for mobile rich media ads that will run in mobile apps.  This is a standardized set of commands, designed to work with HTML5 and JavaScript, that developers creating rich media ads will use to communicate what those ads do (expand, resize, get access to device functionalities such as the accelerometer, etc) with the apps they are being served into.

Today different apps (incorporating different rich media vendors’ SDKs) have disparate requirements in terms of the APIs that creative developers must use to communicate with the app.  Therefore, the same creative has to have its code rewritten in order to run across different apps.  Developing a single API that diverse SDK vendors will support is the goal of MRAID.

This means that MRAID compliant rich media ads will run within MRAID compliant applications from any publisher using an MRAID compliant SDK. Put another way, agencies will be able to quickly and easily run creative across applications from different publishers.

Step by Step Executing android NDK Programs in ubuntu 11.40(Linux)

USE OF NDK:
The Android NDK is a companion tool to the Android SDK that lets you build performance-critical portions of your apps in native code. It provides headers and libraries that allow you to build activities, handle user input, use hardware sensors, access application resources, and more, when programming in C or C++. If you write native code, your applications are still packaged into an .apk file and they still run inside of a virtual machine on the device. The fundamental Android application model does not change.
Using native code does not result in an automatic performance increase, but always increases application complexity. If you have not run into any limitations using the Android framework APIs, you probably do not need the NDK.


Requirement to Execute the NDK Programs:
1. android sdk
2. android ndk-r7
You can download ndk from
link:http://developer.android.com/sdk/ndk/index.html
Download:android-ndk-r7-linux-x86.tar.bz2
3.setup the sdk in eclipse.


Steps to excecute the NDK:


Step1: Crete a android project in eclipse Eg:NDK



Step 2: Create the folder in our project name jni .and don't create the libs and obj folder in project those are automatically generated by ndk tool
Step 3: create a package in src in my case /NDK/src/com.srikanth


Step 4:creating a NativeCode class writing native methods: /NDK/src/com/srikanth/NativeCode.java

package com.srikanth;

public class NativeCode {

static {
System.loadLibrary("ndk_demo");
}

/**
* Adds two integers, returning their sum
*/
public native int add( int v1, int v2 );

/**
* Returns Hello World string
*/
public native String hello();

}

step5:
native method C file generator
using javah tool

Eecuting the NativeCode class using javah.Go to Terminal>
>cd goto your project direcotry
NDK>cd bin/classes
classes>javah -jni com.srNativeCode
the javah toll genrate the com_srikanth_NativeCode.h in classes folder copy the file in project jni folder. (NDK/jni/com_srikanth_NativeCode.h)

it look like below:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_srikanth_NativeLib */

#ifndef _Included_com_srikanth_NativeCode
#define _Included_com_srikanth_NativeCode
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_srikanth_NativeLib
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_srikanth_NativeCode_add
(JNIEnv *, jobject, jint, jint);

/*
* Class: com_srikanth_NativeLib
* Method: hello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_srikanth_NativeCode_hello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif




step 6: Providing the native methods definition in ndk_demo.c file under NDK/jni/ndk_demo.c

#include "com_srikanth_NativeCode.h"

JNIEXPORT jstring JNICALL Java_com_srikanth_NativeCode_hello
(JNIEnv * env, jobject obj) {
return (*env)->NewStringUTF(env, "Hello World!");
}

JNIEXPORT jint JNICALL Java_com_srikanth_NativeCode_add
(JNIEnv * env, jobject obj, jint value1, jint value2) {
return (value1 + value2);
}


Step 7: Creating making file under jni dir (ie.NDK/jni/Android.mk)
Android.mk code


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ndk_demo
LOCAL_SRC_FILES := ndk_demo.c

include $(BUILD_SHARED_LIBRARY)


Step 8:Building the ndk. Downloaded ndk extrace in any directory .My case ie in /home/android/android-ndk-r7. Goto the android-ndk-r7/prebuild/linu-x86/bin
under you can find file awk cheange the name to awk_


Step 9:
open terminal

> cd Projectdir
NDK>/home/android/android-ndk-r7/ndk-build

you will get the follwing file in your project

Compile thumb : ndk_demo <= ndk_demo.c

SharedLibrary : libndk_demo.so

Install : libndk_demo.so => libs/armeabi/libndk_demo.so


Refresh the project one ndk tool buld the folling folder and file (libs,obj)

step 10:creting ui for test this ndk. main.xml (/NDK/res/layout/main.xml)



Step 11:
NDKAcitive.java (/NDK/src/com/srikanth/NDKActivity.java)
package com.srikanth;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class NDKActivity extends Activity {
/** Called when the activity is first created. */
NativeCode nativeLib;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nativeLib = new NativeCode();
String helloText = nativeLib.hello();

// Update the UI
TextView outText = (TextView) findViewById(R.id.textOut);
outText.setText(helloText);

// Setup the UI
Button buttonCalc = (Button) findViewById(R.id.buttonCalc);

buttonCalc.setOnClickListener(new OnClickListener() {
TextView result = (TextView) findViewById(R.id.result);
EditText value1 = (EditText) findViewById(R.id.value1);
EditText value2 = (EditText) findViewById(R.id.value2);

public void onClick(View v) {
int v1, v2, res = -1;
v1 = Integer.parseInt(value1.getText().toString().trim());
v2 = Integer.parseInt(value2.getText().toString().trim());

res = nativeLib.add(v1, v2);
result.setText(new Integer(res).toString());
}



});
}
}

Step 12:
Run the NDK Project