You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by lu...@apache.org on 2019/08/01 12:27:17 UTC

[incubator-weex] branch master updated: [Android] Fix problems in Android Lint (#2777)

This is an automated email from the ASF dual-hosted git repository.

luckychen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 756eb78  [Android] Fix problems in Android Lint (#2777)
756eb78 is described below

commit 756eb787424f7e92a855c60a7ed975804148bcdf
Author: YorkShen <sh...@gmail.com>
AuthorDate: Thu Aug 1 20:27:11 2019 +0800

    [Android] Fix problems in Android Lint (#2777)
---
 android/sdk/build.gradle                           |  1 +
 .../main/java/com/taobao/weex/WXEnvironment.java   |  9 ++++----
 .../com/taobao/weex/bridge/WXBridgeManager.java    |  2 +-
 .../java/com/taobao/weex/bridge/WXJSObject.java    |  4 ++--
 .../java/com/taobao/weex/http/WXStreamModule.java  |  9 ++++----
 .../com/taobao/weex/ui/component/WXComponent.java  |  3 ++-
 .../java/com/taobao/weex/ui/component/WXImage.java |  3 ++-
 .../com/taobao/weex/ui/component/WXScroller.java   | 21 +++++++++----------
 .../weex/ui/component/list/BasicListComponent.java |  2 +-
 .../java/com/taobao/weex/ui/view/WXEditText.java   |  2 ++
 .../java/com/taobao/weex/ui/view/WXImageView.java  |  2 ++
 .../view/refresh/circlebar/CircleProgressBar.java  |  2 ++
 .../weex/ui/view/refresh/core/WXSwipeLayout.java   |  7 +++++++
 .../com/taobao/weex/utils/WXResourceUtils.java     |  7 +++----
 .../com/taobao/weex/utils/WXSoInstallMgrSdk.java   | 20 +++++++-----------
 .../com/taobao/weex/utils/tools/LogDetail.java     |  3 ++-
 android/sdk/src/main/res/values/isrtl.xml          | 24 ++++++++++++++++++++++
 17 files changed, 78 insertions(+), 43 deletions(-)

diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle
index b6dd8fa..e183968 100755
--- a/android/sdk/build.gradle
+++ b/android/sdk/build.gradle
@@ -220,6 +220,7 @@ dependencies {
     testImplementation 'org.hamcrest:hamcrest-core:1.3'
     testImplementation 'org.javassist:javassist:3.20.0-GA'
     testImplementation 'org.mockito:mockito-core:1.10.19'
+    //noinspection GradleDependency
     testImplementation 'org.objenesis:objenesis:2.1'
     testImplementation 'org.powermock:powermock-core:1.6.4'
     testImplementation 'org.powermock:powermock-api-mockito:1.6.4'
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
index 519861d..fc51378 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -48,6 +48,7 @@ import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -58,10 +59,10 @@ public class WXEnvironment {
   public static final String OS = "android";
   public static String SYS_VERSION = android.os.Build.VERSION.RELEASE;
   static{
-    if(SYS_VERSION != null && SYS_VERSION.toUpperCase().equals("P")){
+    if(SYS_VERSION != null && SYS_VERSION.toUpperCase(Locale.ROOT).equals("P")){
         SYS_VERSION = "9.0.0";
     }
-    if(SYS_VERSION != null && SYS_VERSION.toUpperCase().equals("Q")){
+    if(SYS_VERSION != null && SYS_VERSION.toUpperCase(Locale.ROOT).equals("Q")){
        SYS_VERSION = "10.0.0";
     }
   }
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index d9d09cc..781a2b0 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -957,7 +957,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public void callReportCrash(String crashFile, final String instanceId, final String url) {
     // statistic weex core process crash
     Date date = new Date();
-    DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+    DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US);
     String time = format.format(date);
     final String origin_filename = crashFile + "." + time;
     File oldfile = new File(crashFile);
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java
index e505119..56ce501 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java
@@ -54,12 +54,12 @@ public class WXJSObject {
         data = object;
         if (object instanceof Integer) {
             type = NUMBER;
-            data = new Double(((Integer) object).intValue());
+            data = (double) (Integer) object;
         } else if (object instanceof Double) {
             type = NUMBER;
         } else if (object instanceof Float) {
             type = NUMBER;
-            data = new Double(((Float) object).intValue());
+            data = (double) ((Float) object).intValue();
         } else if (object instanceof String) {
             type = String;
         } else if (object instanceof Object) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java b/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
index 12a145b..db47501 100644
--- a/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
@@ -41,6 +41,7 @@ import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -76,7 +77,7 @@ public class WXStreamModule extends WXModule {
     String body = paramsObj.getString("body");
     int timeout = paramsObj.getIntValue("timeout");
 
-    if (method != null) method = method.toUpperCase();
+    if (method != null) method = method.toUpperCase(Locale.ROOT);
     Options.Builder builder = new Options.Builder()
             .setMethod(!"GET".equals(method)
                     &&!"POST".equals(method)
@@ -157,7 +158,7 @@ public class WXStreamModule extends WXModule {
       }
     }
 
-    if (method != null) method = method.toUpperCase();
+    if (method != null) method = method.toUpperCase(Locale.ROOT);
     Options.Builder builder = new Options.Builder()
         .setMethod(!"GET".equals(method)
             &&!"POST".equals(method)
@@ -234,7 +235,7 @@ public class WXStreamModule extends WXModule {
     if(headers.containsKey(key)){
       return headers.get(key);
     }else{
-      return headers.get(key.toLowerCase());
+      return headers.get(key.toLowerCase(Locale.ROOT));
     }
   }
 
@@ -243,7 +244,7 @@ public class WXStreamModule extends WXModule {
   static String readAsString(byte[] data,String cType){
     String charset = "utf-8";
     if(cType != null){
-      Matcher matcher = CHARSET_PATTERN.matcher(cType.toLowerCase());
+      Matcher matcher = CHARSET_PATTERN.matcher(cType.toLowerCase(Locale.ROOT));
       if(matcher.find()){
         charset = matcher.group(1);
       }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
index 4394c4b..7d4fdcb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
@@ -122,6 +122,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -979,7 +980,7 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
       mInstance.getWXPerformance().cellExceedNum++;
       if (WXAnalyzerDataTransfer.isOpenPerformance){
         WXAnalyzerDataTransfer.transferPerformance(getInstanceId(),"details",WXInstanceApm.KEY_PAGE_STATS_CELL_EXCEED_NUM,
-            String.format("cell:[w:%d,h:%d],attrs:%s,styles:%s",realWidth,realHeight,getAttrs(),getStyles())
+            String.format(Locale.ROOT, "cell:[w:%d,h:%d],attrs:%s,styles:%s",realWidth,realHeight,getAttrs(),getStyles())
         );
       }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
index 020a81d..f165e1c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
@@ -27,6 +27,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import android.Manifest;
@@ -484,7 +485,7 @@ public class WXImage extends WXComponent<ImageView> {
 
         if (WXAnalyzerDataTransfer.isOpenPerformance){
           WXAnalyzerDataTransfer.transferPerformance(getInstanceId(),"details",WXInstanceApm.KEY_PAGE_STATS_WRONG_IMG_SIZE_COUNT,
-              String.format("imgSize:[%d,%d],viewSize:[%d,%d],urL:%s",imgWidth,imgHeight,imageView.getMeasuredWidth(),imageView.getMeasuredHeight()
+              String.format(Locale.ROOT, "imgSize:[%d,%d],viewSize:[%d,%d],urL:%s",imgWidth,imgHeight,imageView.getMeasuredWidth(),imageView.getMeasuredHeight()
               ,currentImgUrlStr)
           );
         }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
index c7f1679..34ca774 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
@@ -18,13 +18,7 @@
  */
 package com.taobao.weex.ui.component;
 
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
+import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.graphics.Point;
@@ -33,12 +27,10 @@ import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
 import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
 import android.support.v4.view.ViewCompat;
 import android.text.TextUtils;
-import android.view.Gravity;
-import android.util.Log;
 import android.view.GestureDetector;
+import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -68,6 +60,12 @@ import com.taobao.weex.ui.view.refresh.wrapper.BounceScrollerView;
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 /**
  * Component for scroller. It also support features like
@@ -389,6 +387,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
     }
   }
 
+  @SuppressLint("RtlHardcoded")
   @Override
   public void setMarginsSupportRTL(ViewGroup.MarginLayoutParams lp, int left, int top, int right, int bottom) {
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
@@ -419,7 +418,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
       return;
     }
     if (component.getHostView() != null) {
-      int layoutDirection = component.isLayoutRTL() ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
+      int layoutDirection = component.isLayoutRTL() ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR;
       ViewCompat.setLayoutDirection(component.getHostView(), layoutDirection);
     }
     super.setLayout(component);
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index 721ea7f..3eeeb57 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -201,7 +201,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
   @Override
   public void setLayout(WXComponent component) {
     if (component.getHostView() != null) {
-      int layoutDirection = component.isLayoutRTL() ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
+      int layoutDirection = component.isLayoutRTL() ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR;
       ViewCompat.setLayoutDirection(component.getHostView(), layoutDirection);
     }
     super.setLayout(component);
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java
index d8d67c1..5fa5dde 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java
@@ -18,6 +18,7 @@
  */
 package com.taobao.weex.ui.view;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Build;
 import android.view.ActionMode;
@@ -33,6 +34,7 @@ import com.taobao.weex.ui.view.gesture.WXGestureObservable;
 /**
  * Wrapper class for editText
  */
+@SuppressLint("AppCompatCustomView")
 public class WXEditText extends EditText implements WXGestureObservable {
 
   private WXGesture wxGesture;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
index 1de30d9..efe9468 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
@@ -18,6 +18,7 @@
  */
 package com.taobao.weex.ui.view;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
@@ -39,6 +40,7 @@ import com.taobao.weex.utils.WXLogUtils;
 import java.lang.ref.WeakReference;
 import java.util.Arrays;
 
+@SuppressLint("AppCompatCustomView")
 public class WXImageView extends ImageView implements WXGestureObservable,
         IRenderStatus<WXImage>,
         IRenderResult<WXImage>, WXImage.Measurable {
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java
index 5bd0146..8d81d5e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java
@@ -18,6 +18,7 @@
  */
 package com.taobao.weex.ui.view.refresh.circlebar;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Canvas;
@@ -35,6 +36,7 @@ import android.widget.ImageView;
 /**
  * Modify of android.support.v4
  */
+@SuppressLint("AppCompatCustomView")
 public class CircleProgressBar extends ImageView {
 
   private static final int KEY_SHADOW_COLOR = 0x1E000000;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java
index 9f66c03..91f2711 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java
@@ -20,6 +20,7 @@ package com.taobao.weex.ui.view.refresh.core;
 
 import android.animation.Animator;
 import android.animation.ValueAnimator;
+import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.graphics.Color;
@@ -692,11 +693,14 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent,
    * Whether child view can scroll up
    * @return
    */
+  @SuppressLint("ObsoleteSdkInt")
   public boolean canChildScrollUp() {
     if (mTargetView == null) {
       return false;
     }
     if (Build.VERSION.SDK_INT < 14) {
+      //The minimum version of Android platform that Weex supports is API 14,
+      //so this block should never enter.
       if (mTargetView instanceof AbsListView) {
         final AbsListView absListView = (AbsListView) mTargetView;
         return absListView.getChildCount() > 0
@@ -714,11 +718,14 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent,
    * Whether child view can scroll down
    * @return
    */
+  @SuppressLint("ObsoleteSdkInt")
   public boolean canChildScrollDown() {
     if (mTargetView == null) {
       return false;
     }
     if (Build.VERSION.SDK_INT < 14) {
+      //The minimum version of Android platform that Weex supports is API 14,
+      //so this block should never enter.
       if (mTargetView instanceof AbsListView) {
         final AbsListView absListView = (AbsListView) mTargetView;
         if (absListView.getChildCount() > 0) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java
index b0246fa..c368689 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java
@@ -22,13 +22,12 @@ import android.graphics.Color;
 import android.graphics.LinearGradient;
 import android.graphics.Shader;
 import android.support.annotation.NonNull;
-import android.support.v4.util.LruCache;
-import android.util.Pair;
 import android.text.TextUtils;
-
+import android.util.Pair;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.StringTokenizer;
 
@@ -334,7 +333,7 @@ public class WXResourceUtils {
     float[] points = {0, 0, 0, 0};
 
     if (!TextUtils.isEmpty(direction)) {
-      direction = direction.replaceAll("\\s*", "").toLowerCase();
+      direction = direction.replaceAll("\\s*", "").toLowerCase(Locale.ROOT);
     }
 
     switch (direction) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index 9205b8d..463d1a6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -18,34 +18,27 @@
  */
 package com.taobao.weex.utils;
 
+import android.annotation.SuppressLint;
+import android.app.Application;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
 import android.os.Build;
-import android.preference.PreferenceManager;
 import android.text.TextUtils;
-import android.util.Log;
-
 import com.taobao.weex.IWXStatisticsListener;
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.common.WXErrorCode;
 import dalvik.system.PathClassLoader;
-import java.io.BufferedReader;
-import java.io.Closeable;
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
 import java.util.Enumeration;
+import java.util.Locale;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
@@ -76,13 +69,13 @@ public class WXSoInstallMgrSdk {
   private final static String STARTUPSO = "/libweexjsb.so";
   private final static String STARTUPSOANDROID15 = "/libweexjst.so";
 
-  static Context mContext = null;
+  static Application mContext = null;
   private static IWXSoLoaderAdapter mSoLoader = null;
   private static IWXStatisticsListener mStatisticsListener = null;
 
   private static String mAbi = null;
 
-  public static void init(Context c,
+  public static void init(Application c,
                           IWXSoLoaderAdapter loader,
                           IWXStatisticsListener listener) {
     mContext = c;
@@ -358,7 +351,7 @@ public class WXSoInstallMgrSdk {
       if (TextUtils.isEmpty(mAbi)){
         mAbi = ARMEABI;
       }
-      mAbi = mAbi.toLowerCase();
+      mAbi = mAbi.toLowerCase(Locale.ROOT);
     }
     return mAbi;
   }
@@ -455,6 +448,7 @@ public class WXSoInstallMgrSdk {
   /**
    * Load .so library
    */
+  @SuppressLint("UnsafeDynamicallyLoadedCode")
   static boolean _loadUnzipSo(String libName,
                               int version,
                               IWXUserTrackAdapter utAdapter) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/tools/LogDetail.java b/android/sdk/src/main/java/com/taobao/weex/utils/tools/LogDetail.java
index d7b3211..c257296 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/tools/LogDetail.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/tools/LogDetail.java
@@ -23,6 +23,7 @@ import android.util.Log;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.taobao.weex.WXEnvironment;
+import java.util.Locale;
 
 public class LogDetail {
     public static final String KeyWrod_Init = "Weex_Init";
@@ -60,7 +61,7 @@ public class LogDetail {
         time.constructor();
         info.taskName = name;
         if(!TextUtils.isEmpty(name)) {
-            String s = name.toLowerCase();
+            String s = name.toLowerCase(Locale.ROOT);
             if(s.contains("module")
             || s.contains("component")
                     || s.contains("framework")) {
diff --git a/android/sdk/src/main/res/values/isrtl.xml b/android/sdk/src/main/res/values/isrtl.xml
new file mode 100644
index 0000000..5008fea
--- /dev/null
+++ b/android/sdk/src/main/res/values/isrtl.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<resources>
+    <bool name="weex_is_right_to_left">false</bool>
+</resources>
\ No newline at end of file