blob: e2b25693ae66277e5e2ddd1839382e038a10c2f0 [file] [log] [blame] [view]
---
title: Integrate to Android
type: advanced
order: 3
has_chapter_content: true
version: 0.10
---
# Integrate to Android
When you need to use the new features or to customize specific features, you can rely on the Source SDK for development
## Prerequisites
Assuming you have the Android SDK installed, run `android` to open the Android SDK Manager.
Make sure you have the following installed:
1. Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
2. SDK build tools version 23.0.2 (buildToolsVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
3. Android Support Repository >= 17 (for Android Support Library)
4. Android NDK (download & extraction instructions [here](http://developer.android.com/ndk/downloads/index.html))
Point Gradle to your Android SDK: either have `$ANDROID_SDK` and `$ANDROID_NDK ` defined, or create a local.properties file in the root of your weex checkout with the following contents:
```
sdk.dir=absolute_path_to_android_sdk
ndk.dir=absolute_path_to_android_ndk
```
Example:
```
sdk.dir=/Users/your_name/android-sdk-macosx
ndk.dir=/Users/your_name/android-ndk-r10e
```
## Building the source
#### 1. Clone source from github
First, you need to git clone `weex` from github:
```shell
git clone https://github.com/alibaba/weex.git
```
##### 2. Build APK
*** 1) Android studio build APK ***
```
Step 1: run android studio
Step 2: open the file of ~/weex/android/playground/build.gradle
Step 3: Run the Project and the Apk will auto install in your android device
```
*** 2) Gradle build APK ***
```
Step 1: enter the direction of "/weex/android/playground"
Step 2: run the build command: ./gradlew clean assemble
Step 3: obtain the payground APK from the direction of weex/android/playground/app/build/outputs/apk/
Step 3: then adb install -r weex/android/playground/app/build/outputs/apk/playgroud.apk
```
#### 3. Adding the `:weex_sdk_android` project
Add the `:weex_sdk_android` project in `android/settings.gradle`:
```gradle
include ':weex_sdk_android'
project(':weex_sdk_android').projectDir = new File(
rootProject.projectDir, '../weex_sdk_android')
```
Modify your `android/app/build.gradle` to use the `:weex_sdk_android` project instead of the pre-compiled library, e.g. - replace `compile 'com.taobao.android:weex_sdk:0.4.1` with `compile project(':weex_sdk_android')`:
```gradle
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile project(':weex_sdk_android')
...
}
```
#### 3. Making 3rd-party modules use your project
If you use 3rd-party weex modules, you need to override their dependencies so that they don't build the pre-compiled library. Otherwise you'll get an error while compiling - `Error: more than one library with package name 'com.taobao.weex'`.
Modify your `android/app/build.gradle` and replace `compile project(':weex-custom-module')` with:
```gradle
compile(project(':weex-custom-module')) {
exclude group: 'com.taobao.weex', module: 'weex_sdk_android'
}
```
#### 4、How to load local Your Js bundle in the directory of Android assets
Besides load a Js Bundle online, you also can load the js bundle from the directory of Android assets.
For Example:
```
String yourbundleStr = WXFileUtils.loadFileContent("yourBundle.js", context);
WXSDKInstance.render(TAG, yourbundleStr, options, null, width, Height, WXRenderStrategy.APPEND_ASYNC);
```
## Building from Android Studio
From the Welcome screen of Android Studio choose "Import project" and select the `playground` folder of your app.
You should be able to use the _Run_ button to run your app on a device.
## Tip
1. Since the packet size limit is currently only compiled arm , X86 does not support.
2. Gradle build fails in `ndk-build`. See the section about `local.properties` file above.
#Quick access
## Requirements
* an existing, gradle-based Android app
## Prepare your app
In your app's `build.gradle` file add the WEEX dependency:
compile 'com.taobao.android:weex_sdk:0.4.1'
You can find the latest version of the WEEX library on [jcenter](https://bintray.com/search?query=weex_sdk&forceAgnostic=true). Next, make sure you have the Internet permission in your `AndroidManifest.xml`:
<uses-permission android:name="android.permission.INTERNET" />
## Add native code
You need to add some native code in order to start the Weex runtime and get it to render something. To do this, we're going to create an `Application` to init weex, then we we're going to create an `Activity` that creates a WeexContainerView, starts a Weex application inside it and sets it as the main content view.
```java
public class WXApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
WXEnvironment.addCustomOptions("appName","TBSample");
WXSDKEngine.init(this);
try {
WXSDKEngine.registerComponent("wtRichText", WTRichText.class);
......
WXSDKEngine.registerModule("event", WXEventModule.class);
} catch (WXException e) {
e.printStackTrace();
}
}
}
```
Next,
```java
// Create or find RenderContainer view.
// Notice: If you create RenderContainer manually, don't forget add it to view tree.
RenderContainer renderContainer = (RenderContainer)findViewById(R.id.container);
//crate Weex instance
WXSDKInstance mInstance = new WXSDKInstance(this);
//set render container
mInstance.setRenderContainer(renderContainer);
//set image Adapter
mInstance.setImgLoaderAdapter(new ImageAdapter(this));
//register render listener
mInstance.registerRenderListener(new IWXRenderListener() {
@Override
public void onViewCreated(WXSDKInstance instance, View resultView) {
// Notice: If you don't setRenderContainer before render, you need add the resultView to view tree here.
}
@Override
public void onRenderSuccess(WXSDKInstance instance) {
}
@Override
public void onRefreshSuccess(WXSDKInstance instance) {
}
@Override
public void onException(WXSDKInstance instance, String errCode,String msg) {
}
});
//start render weex view
mInstance.render(pageName,template, null, null, -1, -1, WXRenderStrategy.APPEND_ASYNC);
```
That's it, your activity is ready to run some JavaScript code.
## Reference Example
[`Weex Examples`](https://github.com/apache/incubator-weex/tree/master/examples)