diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
index f3cb22b..d777191 100644
--- a/docs/.vuepress/config.js
+++ b/docs/.vuepress/config.js
@@ -188,7 +188,8 @@
             ['weex-third-party-extensions','List of Third Party Plugin']
           ],
           '/download/':[
-             ['download', "Source Download"] 
+             ['download', "Source Download"],
+             ['major_change', 'Major Change'] 
           ]
         }
       },
@@ -365,7 +366,8 @@
             ['weex-third-party-extensions','Weex 三方插件']
           ],
           '/zh/download/':[
-            ['download', "源代码下载"] 
+            ['download', "源代码下载"],
+            ['major_change', '重大变更']
           ]
         }
       }
diff --git a/docs/download/download.md b/docs/download/download.md
index d453bfb..8f0bd7c 100644
--- a/docs/download/download.md
+++ b/docs/download/download.md
@@ -12,17 +12,24 @@
 :::
 
 # Latest Release
+## 0.28.0
+* Released in Oct 23, 2019
+* [ChangeLog](https://github.com/apache/incubator-weex/releases/tag/0.28.0)
+* [Source](https://www.apache.org/dyn/closer.cgi?filename=incubator/weex/0.28.0/apache-weex-incubating-0.28.0-src.tar.gz&action=download) | [Signature](https://www.apache.org/dist/incubator/weex/0.28.0/apache-weex-incubating-0.28.0-src.tar.gz.asc) | [Checksum](https://dist.apache.org/repos/dist/release/incubator/weex/0.28.0/apache-weex-incubating-0.28.0-src.tar.gz.sha512)
+* Binary
+    * Android 
+        * **Since 0.28.0, Weex would publish two convince binary in each release, please [read the documentation about the detail](major_change.html).**
+        * `compile 'org.apache.weex:sdk:0.28.0'`
+        * `compile 'org.apache.weex:sdk_legacy:0.28.0'`
+    * iOS 
+        `pod "WeexSDK","0.28.0"`
+
+# Archived Release
 ## 0.26.0
 * Released in July 11, 2019
 * [ChangeLog](https://github.com/apache/incubator-weex/releases/tag/0.26.0)
-* [Source](https://www.apache.org/dyn/closer.cgi?filename=incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz&action=download) | [Signature](https://www.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.asc) | [Checksum](https://dist.apache.org/repos/dist/release/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.sha512)
-* Binary
-    * Android 
-        `compile 'com.taobao.android:weex_sdk:0.26.0'`
-    * iOS 
-        `pod "WeexSDK","0.26.0"`
+* [Source](https://archive.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz) | [Signature](ttps://archive.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.asc) | [Checksum](https://archive.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.sha512)
 
-# Archived Release
 ## 0.24.0
 * Released in May 23, 2019
 * [ChangeLog](https://github.com/apache/incubator-weex/releases/tag/0.24.0)
diff --git a/docs/download/major_change.md b/docs/download/major_change.md
new file mode 100644
index 0000000..ce311dd
--- /dev/null
+++ b/docs/download/major_change.md
@@ -0,0 +1,32 @@
+# Introduction
+This page introduces the break change of Weex, you can visit [GitHub page](https://github.com/apache/incubator-weex/releases) for detail changelog.
+
+# Version
+## 0.28
+**The following three major change in 0.28 only affects Android developers**
+### Android
+#### Package name
+Due to the fact that Weex was a software of Alibaba Group (the mother company of Taobao Software Cooperation, ltd.) before donated to ASF (Apache Software Foundation),the Android package name of Weex was `com.taobao.weex` before Weex 0.28.0 released. 
+
+Since Weex 0.28.0, the package name of Android(i.e. Java) files was changed to `org.apache.weex`, which may cause compiling failure if you try to upgrade from a older version. For backward-compatibility reasons, we provide an [artifact](#groupid-and-artifactid-in-jcenter) named `sdk_legacy` where all files are still in the package name of `com.taobao.weex`. The legacy artifact may not be maintained in the future, please upgrade to the new package name when it's possible for you.
+
+#### GroupId and artifactId in JCenter
+Due to the fact that Weex was a software of Alibaba Group (the mother company of Taobao Software Cooperation, ltd.) before donated to ASF (Apache Software Foundation),Weex Android was under `com.taobao.android:weex_sdk` in JCenter before Weex 0.28.0 release.
+
+Since 0.28.0, Weex provides a convince library in JCenter with the following groupId and artifactId:
+* `org.apache.weex:sdk` is the currently stable package of Weex, where all Java files are under the package of `org.apache.weex`.
+* `org.apache.weex:sdk_legacy` is the legacy package of Weex, where all Java files are under the package of `com.taobao.weex`. This artifact may not be maintained in the future, please upgrade to the new package name when it's possible for you.
+
+#### JavaScript Interpreter
+Before Weex 0.28.0, Weex Android relied and bundled [JavaScriptCore](https://github.com/alibaba/weex_js_engine/tree/bridge_branch_mergeTimer) into its convince binary(i.e. aar), and this approach have the following disadvantage:
+* JavaScriptCore is partly licensed under BSD, partly licensed under LGPL, which is against the [License policy of ASF](https://apache.org/legal/resolved.html#category-a)
+* Users of Weex has no choice of JavaScript Interpreter if we continue bundling JavaScriptCore in convince binary.
+* The JavaScriptCore Weex used is a pruning version of [official JavaScriptCore](https://svn.webkit.org/repository/webkit/releases/WebKitGTK/webkit-2.17.4/Source/JavaScriptCore/) in 2016 and not update since that time, which means we might miss a lot of new features.
+
+Since Weex 0.28.0, the JavaScript Interpreter is not bundled in the convince binary anymore, users have the freedom of using whatever JavaScript Interpreter they want as long as they implement the [same interface](https://svn.webkit.org/repository/webkit/releases/WebKitGTK/webkit-2.27.1/Source/JavaScriptCore/API/). 
+
+This means users have to bundle a JavaScript Interpreter in their APP to run Weex. For users who don't have idea about how to choose JavaScript Interpreter, one can insert the following code snippet into the `build.gradle` of the app:
+
+    apply from: 'https://raw.githubusercontent.com/apache/incubator-weex/release/0.28/android/sdk/buildSrc/download_jsc.gradle'
+
+The above code snippet will download and bundle [jsc-android](https://www.npmjs.com/package/jsc-android/v/241213.1.0) of version `241213.1.0`. This is only for demonstration purpose, users always have the freedom of choosing JavaScript Interpreter in their APP.
\ No newline at end of file
diff --git a/docs/guide/develop/integrate-to-android-app.md b/docs/guide/develop/integrate-to-android-app.md
index 5b19d46..34eca52 100644
--- a/docs/guide/develop/integrate-to-android-app.md
+++ b/docs/guide/develop/integrate-to-android-app.md
@@ -1,16 +1,9 @@
----
-title: Integrate to Your App
-type: guide
-group: Overview
-order: 1.3
-version: 2.1
----
-
-<!-- toc -->
-
 # Integrate to Android App
-::: warning 
-Considering the package size, Android x86 is not supported for the moment.  
+::: tip
+Currently, Weex supports the following [ABIs](https://developer.android.com/ndk/guides/abis.html):
+* x86
+* armeabi-v7a
+* arm64-v8a
 :::
 
 The following documents assume that you already have a certain Android development experience.
@@ -22,13 +15,18 @@
 
 ## 1. Configure dependency 
 
-edit `build.gradle`
+::: tip
+**Since 0.28.0, Weex would publish two convince binary in each release, please [read the documentation about the detail](../../download/major_change.html).**
+:::
 
-```javascript
+```
 dependencies {
     ...
-    // weex sdk and fastjson
-    compile 'com.taobao.android:weex_sdk:0.20.0.2@aar'
+    // Choose one of the following sdk of weex.
+    //compile 'org.apache.weex:sdk:0.28.0'
+    //compile 'org.apache.weex:sdk_legacy:0.28.0'
+
+    // fastjson
     compile 'com.alibaba:fastjson:1.1.46.android'
 
     //support library dependencies
diff --git a/docs/guide/develop/integrate-to-your-app.md b/docs/guide/develop/integrate-to-your-app.md
deleted file mode 100644
index 580953a..0000000
--- a/docs/guide/develop/integrate-to-your-app.md
+++ /dev/null
@@ -1,254 +0,0 @@
----
-title: Integrate to Your App
-type: guide
-group: Overview
-order: 1.3
-version: 2.1
----
-
-<!-- toc -->
-
-# Integrate to Your App
-> Weex Release Note:  https://github.com/apache/incubator-weex/releases 
-
-## Integrate to Android
-
-The following documents assume that you already have a certain Android development experience.
-
-
-### Quick Start Five Steps
-
-The keys to intergrating Weex into your Android application are the following five step:
-
-1. Configure Gradle dependency in build.gradle
-
-```javascript
-dependencies {
-    ...
-    // weex sdk and fastjson
-    compile 'com.taobao.android:weex_sdk:0.18.0@aar'
-    compile 'com.alibaba:fastjson:1.1.46.android'
-
-    //support library dependencies
-    compile 'com.android.support:recyclerview-v7:23.1.1'
-    compile 'com.android.support:support-v4:23.1.1'
-    compile 'com.android.support:appcompat-v7:23.1.1'
-}
-```
-
-2. Add required permissions in your AndroidManifest.xml
-
-```xml
-<uses-permission android:name="android.permission.INTERNET"/>
-<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-```
-
-3. Init Weex SDK When Application Create
-
-```java
-InitConfig config = new InitConfig.Builder()
-					//imageLib interface 
-    				.setImgAdapter(new FrescoImageAdapter())
-    				//network lib interface
-    				.setHttpAdapter(new InterceptWXHttpAdapter())
-    				.build();
-WXSDKEngine.initialize(applicationContext,config);
-```
-
-- [demo init case](https://github.com/apache/incubator-weex/blob/master/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java)
-- [InterceptWXHttpAdapter](https://github.com/apache/incubator-weex/blob/master/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java)
-- [fresco  imageAdapter](https://github.com/apache/incubator-weex/blob/master/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageAdapter.java) 
-- [picasso imageAdapter](https://github.com/apache/incubator-weex/blob/master/android/commons/src/main/java/com/alibaba/weex/commons/adapter/ImageAdapter.java)
-
-4. Create an WXSDKInstance,  add IWXRenderListener and activity lifecycle on it. load weex bundle url. when  page load success; target view will be send for you on  onViewCreated callback, set target view to activity contentView.
-
-```java
-public class MainActivity extends AppCompatActivity implements IWXRenderListener {
-  WXSDKInstance mWXSDKInstance;
-  @Override
-  protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.activity_main);
-    mWXSDKInstance = new WXSDKInstance(this);
-    mWXSDKInstance.registerRenderListener(this);
-    /**
-    * bundleUrl source http://dotwe.org/vue/38e202c16bdfefbdb88a8754f975454c
-    */
-    String pageName = "WXSample";
-    String bundleUrl = "http://dotwe.org/raw/dist/38e202c16bdfefbdb88a8754f975454c.bundle.wx";
-    mWXSDKInstance.renderByUrl(pageName, bundleUrl, null, null,WXRenderStrategy.APPEND_ASYNC);
-  }
-  @Override
-  public void onViewCreated(WXSDKInstance instance, View view) {
-    setContentView(view);
-  }
-  @Override
-  public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
-  }
-  @Override
-  public void onRefreshSuccess(WXSDKInstance instance, int width, int height) {
-  }
-  @Override
-  public void onException(WXSDKInstance instance, String errCode, String msg) {
-  }
-  @Override
-  protected void onResume() {
-    super.onResume();
-    if(mWXSDKInstance!=null){
-      mWXSDKInstance.onActivityResume();
-    }
-  }
-  @Override
-  protected void onPause() {
-    super.onPause();
-    if(mWXSDKInstance!=null){
-       mWXSDKInstance.onActivityPause();
-    }
-  }
-  @Override
-  protected void onStop() {
-    super.onStop();
-    if(mWXSDKInstance!=null){
-      mWXSDKInstance.onActivityStop();
-    }
-  }
-  @Override
-  protected void onDestroy() {
-    super.onDestroy();
-    if(mWXSDKInstance!=null){
-      mWXSDKInstance.onActivityDestroy();
-    }
-  }
-}
-```
-
-5. Run app, start activity, then you will see hello world demo. well done.
-
-[Hello World Demo Source](http://dotwe.org/vue/38e202c16bdfefbdb88a8754f975454c)
-
-Tip: Click QRCode Image in Demo Source Page, your will see compiled bundle js.
-
-## Integrated to iOS
-
-Through the [CocoaPods](https://cocoapods.org/) or [Carthage](https://github.com/Carthage/Carthage) integrated Weex iOS SDK to your project.
-First assume that you have finished installing the [iOS development environment](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Setup/Setup.html) and [CocoaPods](https://guides.cocoapods.org/using/getting-started.html)(or [Carthage](https://github.com/Carthage/Carthage#installing-carthage)).
-
-### Step 1: Add Dependencies
-
-Import Weex iOS SDK to your existing project, if not, you can create a new project according to the [tutorial](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Setup/Setup.html)).
-Before proceeding, make sure that the Podfile file is under the project file. If not, create one and open with  text editor(if Carthage, please ensure the [`Cartfile`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile) in your project directory). You can choose one of Integration method.
-
-- using [CocoaPods](https://cocoapods.org/)
-	WeexSDK The latest version on cocoaPods can be obtained [here](https://cocoapods.org/pods/WeexSDK) .
-	Add the following to the Podfile file:
-
-	```object-c
-	source 'git@github.com:CocoaPods/Specs.git'
-	target 'YourTarget' do
-	    platform :ios, '7.0'
-	    pod 'WeexSDK', '0.17.0'   ## latest Weex SDK recommended
-	end
-	```
-	Open the command line, switch to the directory of the Podfile file, and run the pod install command. If there are no errors, it means that the environment has been configured.
-- using [Carthage](https://github.com/Carthage/Carthage)
-  [here](https://github.com/apache/incubator-weex/tags) you can get the latest version of WeexSDK.
-  Add `github "apache/incubator-weex"` to [`Cartfile`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile)
-  Open the command line, switch to the directory of the Cartfile, and run `carthage update`.
-  [Add Carthage build framework to your project](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application)
-
-
-### Step 2: Initialize the Weex environment
-
-In the AppDelegate.m file to do the initialization operation, usually in the didFinishLaunchingWithOptions method as follows to add.
-
-```object-c
-//business configuration
-[WXAppConfiguration setAppGroup:@"AliApp"];
-[WXAppConfiguration setAppName:@"WeexDemo"];
-[WXAppConfiguration setAppVersion:@"1.0.0"];
-//init sdk environment
-[WXSDKEngine initSDKEnvironment];
-//register custom module and component，optional
-[WXSDKEngine registerComponent:@"MyView" withClass:[MyViewComponent class]];
-[WXSDKEngine registerModule:@"event" withClass:[WXEventModule class]];
-//register the implementation of protocol, optional
-[WXSDKEngine registerHandler:[WXNavigationDefaultImpl new] withProtocol:@protocol(WXNavigationProtocol)];
-//set the log level
-[WXLog setLogLevel: WXLogLevelAll];
-```
-
-### Step 3: Render weex Instance
-
-Weex supports both full page rendering and partial rendering. What you need to do is render Weex's view with the specified URL and add it to its parent container. The parent container is generally a viewController.
-
-```object-c
-#import <WeexSDK/WXSDKInstance.h>
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    _instance = [[WXSDKInstance alloc] init];
-    _instance.viewController = self;
-    _instance.frame = self.view.frame;
-    __weak typeof(self) weakSelf = self;
-    _instance.onCreate = ^(UIView *view) {
-        [weakSelf.weexView removeFromSuperview];
-        weakSelf.weexView = view;
-        [weakSelf.view addSubview:weakSelf.weexView];
-    };
-    _instance.onFailed = ^(NSError *error) {
-        //process failure
-    };
-    _instance.renderFinish = ^ (UIView *view) {
-        //process renderFinish
-    };
-    NSURL *url = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"js"];
-    [_instance renderWithURL:url options:@{@"bundleUrl":[self.url absoluteString]} data:nil];
-}
-```
-
-WXSDKInstance is a very important class that provides a basic method and some callbacks, such as renderWithURL, onCreate, onFailed, etc., can be found in WXSDKInstance.h.
-
-### Step 4: Destroy Weex Instance
-
-In the dealloc phase of the viewController destroyed Weex instance, can play a role in avoiding memory leaks.
-
-```object-c
-- (void)dealloc
-{
-    [_instance destroyInstance];
-}
-```
-
-#### Build your own WeexSDK.framework and Import to your project.
-
-The Weex SDK can be compiled from the source code. You can try the latest feature in the new feature or bugfix branch.
-
-- `git clone https://github.com/apache/incubator-weex.git'
-  you can use SSH
-
-	```
-	git clone git@github.com:apache/incubator-weex.git
-	```
-  or use https
-
-	```
-	git clone https://github.com/apache/incubator-weex.git
-	```
-
-- open WeexSDK.xcodeproj in `weex/ios/sdk`
-  switch target just below
-  ![img](http://img1.tbcdn.cn/L1/461/1/4fe050b36e7fea52f121e73790b1fdb7ea934e97)
-
-- Build this project or just use the xcode default hot key `⌘ + b`
-
-- Finally you can find `Products` directory in `weex/ios/sdk`, `WeexSDK.framework` was here
-  ![img](http://img4.tbcdn.cn/L1/461/1/52594fea03ee1154845d0f897558b81b4b5bef2e)
-
-- Add `js-framework`(which is in the `WeexSDK.framework` and renamed to `native-bundle-main.js`) to your main bundle
-  ![img](http://img1.tbcdn.cn/L1/461/1/bb3998595bafe9c9336411160c0b6bd3eeb843ef)
-- Import the framework you get above and import system framework
-  ![img](http://img1.tbcdn.cn/L1/461/1/ce309c54c7b3dd3607d7a3d07c44bfd0e0e10f86)
-- add `-ObjC` to your project settings,just like this
-![img](http://img3.tbcdn.cn/L1/461/1/430ae522f5031ff728c95efea49219a11e6852b3)
diff --git a/docs/zh/download/download.md b/docs/zh/download/download.md
index 97086cf..194ddb6 100644
--- a/docs/zh/download/download.md
+++ b/docs/zh/download/download.md
@@ -12,17 +12,24 @@
 :::
 
 # 最新版本
+## 0.28.0
+* 发布日期 2019年10月23日
+* [变更记录](https://github.com/apache/incubator-weex/releases/tag/0.28.0)
+* [源代码](https://www.apache.org/dyn/closer.cgi?filename=incubator/weex/0.28.0/apache-weex-incubating-0.28.0-src.tar.gz&action=download) | [签名](https://www.apache.org/dist/incubator/weex/0.28.0/apache-weex-incubating-0.28.0-src.tar.gz.asc) | [哈希](https://dist.apache.org/repos/dist/release/incubator/weex/0.28.0/apache-weex-incubating-0.28.0-src.tar.gz.sha512)
+* 二进制下载渠道
+    * Android 
+        * **从 0.28.0 开始，Weex 每次 Release 都将会发布两个二进制版本，请[阅读文档了解它们的区别](major_change.html)**
+        * `compile 'org.apache.weex:sdk:0.28.0'`
+        * `compile 'org.apache.weex:sdk_legacy:0.28.0'`
+    * iOS 
+        `pod "WeexSDK","0.28.0"
+
+# 历史版本
 ## 0.26.0
 * 发布日期 2019年7月11日
 * [变更记录](https://github.com/apache/incubator-weex/releases/tag/0.26.0)
-* [源代码](https://www.apache.org/dyn/closer.cgi?filename=incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz&action=download) | [签名](https://www.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.asc) | [哈希](https://dist.apache.org/repos/dist/release/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.sha512)
-* 二进制下载渠道
-    * Android 
-        `compile 'com.taobao.android:weex_sdk:0.26.0'`
-    * iOS 
-        `pod "WeexSDK", "0.26.0"`
+* [源代码](https://archive.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz) | [签名](ttps://archive.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.asc) | [哈希](https://archive.apache.org/dist/incubator/weex/0.26.0/apache-weex-incubating-0.26.0-src.tar.gz.sha512)
 
-# 历史版本
 ## 0.24.0
 * 发布日期 2019年5月23日
 * [变更记录](https://github.com/apache/incubator-weex/releases/tag/0.24.0)
diff --git a/docs/zh/download/major_change.md b/docs/zh/download/major_change.md
new file mode 100644
index 0000000..6d883b1
--- /dev/null
+++ b/docs/zh/download/major_change.md
@@ -0,0 +1,32 @@
+# Introduction
+本文档主要介绍 Weex 的重大变更，对于详细变更日志，请参考 [Weex GitHub page](https://github.com/apache/incubator-weex/releases).
+
+# 版本
+## 0.28
+**下述在 0.28 中的重大变更只影响 Android 用户。**
+### Android
+#### Java 包名
+由于 Weex 在捐献给 ASF(Apache Software Foundation) 前隶属于阿里巴巴集团(淘宝的母公司)，因此在 `0.28.0` 之前，Android 代码中的 Java 包名是 `com.taobao.weex`
+
+从 `0.28.0` 之后，Android 代码中的 Java 包名被修改为 `org.apache.weex`。考虑到这个升级会给现有用户来不兼容，weex 提供了 `org.apache.weex:sdk_legacy` 作为[兼容性方案]((#groupid-and-artifactid-in-jcenter)。这个兼容性方案后续可能不再维护，请尽可能的依 `org.apache.weex:sdk` 并将现有代码的包名升级为 `org.apache.weex`。
+
+#### GroupId and artifactId in JCenter
+由于 Weex 在捐献给 ASF(Apache Software Foundation) 前隶属于阿里巴巴集团(淘宝的母公司)，因此在 `0.28.0` 之前，Android 代码中的 Java 包名是 `com.taobao.weex`，因此在 `0.28.0` 之前，Weex 在JCenter 上的发布产物为 `com.taobao.android:weex_sdk`
+
+从 `0.28.0` 之后，Weex 在 JCenter 上的发布变更为如下形式：
+* `org.apache.weex:sdk` 是稳定且持续维护的 aar 包，在这个包中所有的 Java 类在 `org.apache.weex` 包名下。
+* `org.apache.weex:sdk_legacy` 是兼容性 aar 包，在这包中所有的 Java 类在 `com.taobao.weex` 包名下。兼容性包后续可能不再维护，请尽量升级到 `org.apache.weex:sdk` 上。
+
+#### JavaScript Interpreter
+在 `0.28.0` 之前， Weex Android 依赖并且将[JavaScriptCore](https://github.com/alibaba/weex_js_engine/tree/bridge_branch_mergeTimer) 作为 Weex 在 JCenter 上的发布产物的一部分，这种方式有如下缺陷：
+* JavaScriptCore 属于双重授权项目，一部分以 BSD 形式授权，另一部分以 LGPL 形式授权，而这与 ASF 的 [License 授权政策](https://apache.org/legal/resolved.html#category-a)相违背。
+* 如果将 JavaScriptCore 包含在 Weex 的 JCenter 发布产物中，会剥夺用户选择 JavaScript 解析引擎的自由。
+* Weex 内置的 JavaScriptCore 是基于 [JavaScriptCore 2016版](https://svn.webkit.org/repository/webkit/releases/WebKitGTK/webkit-2.17.4/Source/JavaScriptCore) 进行了裁剪，已经数年未更新。
+
+基于上述原因，从 Weex 0.28.0 开始，JavaScript 引擎将**不再**内置于 Weex 在 JCenter 上的发布产物中，用户可以自由选择它们喜欢的 JavaScript 引擎，只要这个引擎遵循了[指定接口](https://svn.webkit.org/repository/webkit/releases/WebKitGTK/webkit-2.27.1/Source/JavaScriptCore/API/)。
+
+这意味着用户需要在它们的 App 中内置 JavaScript 引擎，否则 Weex 将无法运行。对于不知道如何选择 JavaScript 用户的引擎，可以在 App 的 build.gradle 中引入下述脚本：
+
+    apply from: 'https://raw.githubusercontent.com/apache/incubator-weex/release/0.28/android/sdk/buildSrc/download_jsc.gradle'
+
+这个脚本将会下载并内置[jsc-android](https://www.npmjs.com/package/jsc-android/v/241213.1.0)到你的 App 中。上述脚本仅为演示时使用，用户依然有权利在 App 中选择其符合其诉求的 JavaScript 引擎。
\ No newline at end of file
diff --git a/docs/zh/guide/develop/integrate-to-android-app.md b/docs/zh/guide/develop/integrate-to-android-app.md
index ebfc945..48d9439 100644
--- a/docs/zh/guide/develop/integrate-to-android-app.md
+++ b/docs/zh/guide/develop/integrate-to-android-app.md
@@ -1,16 +1,9 @@
----
-title: Integrate to Your App
-type: guide
-group: Overview
-order: 1.3
-version: 2.1
----
-
-<!-- toc -->
-
 # 集成到Android应用
-::: warning
-考虑到包大小的问题, 暂不提供 Android x86 so 的支持.
+::: tip
+目前，Weex 支持以下 [ABI](https://developer.android.com/ndk/guides/abis.html):
+* x86
+* armeabi-v7a
+* arm64-v8a
 :::
 
 在执行以下步骤之前，请先确认您的Android开发环境是ok的。
@@ -21,13 +14,18 @@
 
 
 ## 1. 设置gradle依赖
-
+::: tip
+从 0.28.0 开始，Weex 每次 Release 都将会发布两个二进制版本，请[阅读文档了解它们的区别](../../download/major_change.html)
+:::
 
 ```
 dependencies {
     ...
-    // weex sdk and fastjson
-    compile 'com.taobao.android:weex_sdk:0.20.0.2@aar'
+    // 以下两个 weex_sdk 版本二选一
+    //compile 'org.apache.weex:sdk:0.28.0'
+    //compile 'org.apache.weex:sdk_legacy:0.28.0'
+
+    // fastjson
     compile 'com.alibaba:fastjson:1.1.46.android'
 
     //support library dependencies
diff --git a/docs/zh/guide/develop/integrate-to-your-app.md b/docs/zh/guide/develop/integrate-to-your-app.md
deleted file mode 100644
index f06a099..0000000
--- a/docs/zh/guide/develop/integrate-to-your-app.md
+++ /dev/null
@@ -1,305 +0,0 @@
----
-title: Integrate to Your App
-type: guide
-group: Overview
-order: 1.3
-version: 2.1
----
-
-<!-- toc -->
-
-# 集成到应用中
-> Weex Release Note:  https://github.com/apache/incubator-weex/releases 
-
-## 集成到Android应用
-
-在执行以下步骤之前，请先确认您的Android开发环境是ok的。
-
-
-### 1. 设置gradle依赖
-
-```
-dependencies {
-    ...
-    // weex sdk and fastjson
-    compile 'com.taobao.android:weex_sdk:0.18.0@aar'
-    compile 'com.alibaba:fastjson:1.1.46.android'
-
-    //support library dependencies
-    compile 'com.android.support:recyclerview-v7:23.1.1'
-    compile 'com.android.support:support-v4:23.1.1'
-    compile 'com.android.support:appcompat-v7:23.1.1'
-}
-```
-### 2. 声明权限
-
-在`AndroidManifest.xml`中声明权限 
-
-```xml
-//网络
-<uses-permission android:name="android.permission.INTERNET"/>
-<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-
-//sd卡读写
-<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-```
-
-### 3. 初始化sdk
-
-
-```java
-InitConfig config = new InitConfig.Builder()
-					//图片库接口
-    				.setImgAdapter(new FrescoImageAdapter())
-    				//网络库接口
-    				.setHttpAdapter(new InterceptWXHttpAdapter())
-    				.build();
-WXSDKEngine.initialize(applicationContext,config);
-
-```
-
-- [demo init case](https://github.com/apache/incubator-weex/blob/master/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java)
-- [InterceptWXHttpAdapter](https://github.com/apache/incubator-weex/blob/master/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java)
-- [fresco  imageAdapter](https://github.com/apache/incubator-weex/blob/master/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageAdapter.java) 
-- [picasso imageAdapter](https://github.com/apache/incubator-weex/blob/master/android/commons/src/main/java/com/alibaba/weex/commons/adapter/ImageAdapter.java)
-
-### 4. 创建weex实例WXSDKInstance 
-
-`WXSDKInstance`是weex渲染页面的基本单元，
-
-- 通过`instance.render(url)`拉取bundle，
-- 在回调`IWXRenderListener`的`onViewCreated `返回创建的view，
-- 将返回的view 添加到Activity的view上（rootView）
-
-[case WXPageActivity](https://github.com/apache/incubator-weex/blob/master/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java)
-
-```java
-public class MainActivity extends AppCompatActivity implements IWXRenderListener {
-  WXSDKInstance mWXSDKInstance;
-  @Override
-  protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.activity_main);
-    mWXSDKInstance = new WXSDKInstance(this);
-    mWXSDKInstance.registerRenderListener(this);
-    /**
-    * bundleUrl source http://dotwe.org/vue/38e202c16bdfefbdb88a8754f975454c
-    */
-    String pageName = "WXSample";
-    String bundleUrl = "http://dotwe.org/raw/dist/38e202c16bdfefbdb88a8754f975454c.bundle.wx";
-    mWXSDKInstance.renderByUrl(pageName, bundleUrl, null, null,WXRenderStrategy.APPEND_ASYNC);
-  }
-  @Override
-  public void onViewCreated(WXSDKInstance instance, View view) {
-    setContentView(view);
-  }
-  @Override
-  public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
-  }
-  @Override
-  public void onRefreshSuccess(WXSDKInstance instance, int width, int height) {
-  }
-  @Override
-  public void onException(WXSDKInstance instance, String errCode, String msg) {
-  }
-  @Override
-  protected void onResume() {
-    super.onResume();
-    if(mWXSDKInstance!=null){
-      mWXSDKInstance.onActivityResume();
-    }
-  }
-  @Override
-  protected void onPause() {
-    super.onPause();
-    if(mWXSDKInstance!=null){
-       mWXSDKInstance.onActivityPause();
-    }
-  }
-  @Override
-  protected void onStop() {
-    super.onStop();
-    if(mWXSDKInstance!=null){
-      mWXSDKInstance.onActivityStop();
-    }
-  }
-  @Override
-  protected void onDestroy() {
-    super.onDestroy();
-    if(mWXSDKInstance!=null){
-      mWXSDKInstance.onActivityDestroy();
-    }
-  }
-}
-```
-
-### 5. 运行app
-
-Run app, start activity, then you will see hello world demo. well done.
-
-运行app，您将会看到一个 `hello world` 页面。
-
-- [Hello World Demo 源码](http://dotwe.org/vue/38e202c16bdfefbdb88a8754f975454c)
-- 提示: 点击二维码, 可以看到最终编译的代码产物。
-
-### 6. SDK混淆规则
-若要在APP中使用混淆，请在相应的配置文件中添加如下规则：
-
-```java
--keep class com.taobao.weex.WXDebugTool{*;}
--keep class com.taobao.weex.devtools.common.LogUtil{*;}
--keepclassmembers class ** {
-  @com.taobao.weex.ui.component.WXComponentProp public *;
-}
--keep class com.taobao.weex.bridge.**{*;}
--keep class com.taobao.weex.dom.**{*;}
--keep class com.taobao.weex.adapter.**{*;}
--keep class com.taobao.weex.common.**{*;}
--keep class * implements com.taobao.weex.IWXObject{*;}
--keep class com.taobao.weex.ui.**{*;}
--keep class com.taobao.weex.ui.component.**{*;}
--keep class com.taobao.weex.utils.**{
-    public <fields>;
-    public <methods>;
-    }
--keep class com.taobao.weex.view.**{*;}
--keep class com.taobao.weex.module.**{*;}
--keep public class * extends com.taobao.weex.common.WXModule{*;}
--keep public class * extends com.taobao.weex.ui.component.WXComponent{*;}
--keep class * implements com.taobao.weex.ui.IExternalComponentGetter{*;}
-```
-
-
-## 集成到iOS应用
-
-
-通过 [CocoaPods](https://cocoapods.org/) 或者 [Carthage](https://github.com/Carthage/Carthage) 集成 Weex iOS SDK 到您的项目中。
-
-首先确认您的开发环境是OK的
-
-- [iOS development environment](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Setup/Setup.html) 
-- [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) 或者 [Carthage](https://github.com/Carthage/Carthage#installing-carthage)).
-
-### 1. 添加依赖
-
-集成 Weex iOS SDK 到您现有的工程中, 如果没有的话, 可以参照[tutorial](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Setup/Setup.html))创建一个新的工程。
-
-在开始之前，确认您的工程下有podfile文件，如果没有，手动创建一个。（如果使用的是`Cartfile`,确认[`Cartfile`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile)在您的工程下）
-
-选择一种方式集成
-
-#### 使用[CocoaPods](https://cocoapods.org/)
-
-修改您的podfile	
-
-```object-c
-	source 'git@github.com:CocoaPods/Specs.git'
-	target 'YourTarget' do
-	    platform :ios, '7.0'
-	    pod 'WeexSDK', '0.17.0'   ## 建议使用最新的版本
-	end
-```
-
-可以从这里查[weex最新的版本地址](https://cocoapods.org/pods/WeexSDK) .
-
-在podfile目录下，运行命令
-```
-pod install
-```
-如果没有`error`提示的话，集成完毕
-
-#### 使用 [Carthage](https://github.com/Carthage/Carthage)
-
-[weex最新的版本地址](https://github.com/apache/incubator-weex/tags) .
-  
-添加 `github "apache/incubator-weex"` 到 [`Cartfile`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile)
-  
-打开命令行，cd 到 artfile所在目录, 运行 `carthage update`.
- 
-[Add Carthage build framework to your project](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application)
-
-
-### 2. 初始化WEEX
-
-同常在 `AppDelegate.m`的 `didFinishLaunchingWithOptions`方法中进行初始化工作。 
-
-
-```object-c
-//业务设置
-[WXAppConfiguration setAppGroup:@"AliApp"];
-[WXAppConfiguration setAppName:@"WeexDemo"];
-[WXAppConfiguration setAppVersion:@"1.0.0"];
-//初始化weex sdk
-[WXSDKEngine initSDKEnvironment];
-//注册自定义的组件 和模块
-[WXSDKEngine registerComponent:@"MyView" withClass:[MyViewComponent class]];
-[WXSDKEngine registerModule:@"event" withClass:[WXEventModule class]];
-//注册接口实现，如网络库、图片库
-[WXSDKEngine registerHandler:[WXNavigationDefaultImpl new] withProtocol:@protocol(WXNavigationProtocol)];
-//设置log等级
-[WXLog setLogLevel: WXLogLevelAll];
-```
-
-- [init case](https://github.com/apache/incubator-weex/blob/master/ios/playground/WeexDemo/AppDelegate.m)
-
-### 3. 渲染instnace页面
-
-我们同时支持全页页面 和 部分卡片渲染方式。您只需要在调用函数时，制定需要展示的尺寸，并且讲view 添加到容器view上。
-
-
-```object-c
-#import <WeexSDK/WXSDKInstance.h>
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    _instance = [[WXSDKInstance alloc] init];
-    _instance.viewController = self;
-    _instance.frame = self.view.frame;
-    __weak typeof(self) weakSelf = self;
-    _instance.onCreate = ^(UIView *view) {
-        [weakSelf.weexView removeFromSuperview];
-        weakSelf.weexView = view;
-        [weakSelf.view addSubview:weakSelf.weexView];
-    };
-    _instance.onFailed = ^(NSError *error) {
-        //process failure
-    };
-    _instance.renderFinish = ^ (UIView *view) {
-        //process renderFinish
-    };
-    NSURL *url = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"js"];
-    [_instance renderWithURL:url options:@{@"bundleUrl":[self.url absoluteString]} data:nil];
-}
-```
-
-WXSDKInstance 是一个非常重要的类，提供很多功能，比如渲染函数renderWithURL,各种事件回调, 比如, onCreate, onFailed, etc., 具体函数参见[WXSDKInstance](https://github.com/apache/incubator-weex/blob/master/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h)
-
-### 4. 销毁 Instance
-
-在`viewController `销毁时，需要同步调用instance的`destroyInstance`方法，weex会做内存回收，否则会出现内存泄漏。
-
-```object-c
-- (void)dealloc
-{
-    [_instance destroyInstance];
-}
-```
-
-## 构建framework并且引入到您的工程中
-
-如果您需要尝试最新的feature或者其它需求，可以根据master上最新的源码进行构建
-
-- `git clone https://github.com/apache/incubator-weex.git`
-- 打开 WeexSDK.xcodeproj in `weex/ios/sdk`，选择target
-  ![img](http://img1.tbcdn.cn/L1/461/1/4fe050b36e7fea52f121e73790b1fdb7ea934e97)
-- 点击编译图标 或者使用快捷键`⌘ + b`
-- 产物在  `weex/ios/sdk/Products `
-  ![img](http://img4.tbcdn.cn/L1/461/1/52594fea03ee1154845d0f897558b81b4b5bef2e)
-
-- 添加 `js-framework` 到工程中
-  ![img](http://img1.tbcdn.cn/L1/461/1/bb3998595bafe9c9336411160c0b6bd3eeb843ef)
-- 导入framework 和依赖的系统framework
-  ![img](http://img1.tbcdn.cn/L1/461/1/ce309c54c7b3dd3607d7a3d07c44bfd0e0e10f86)
-- 添加`-ObjC` 到工程设置
-![img](http://img3.tbcdn.cn/L1/461/1/430ae522f5031ff728c95efea49219a11e6852b3)
