android+脚本开发,针对Android的JavaScriptCore构建脚本

625332134c6f4d4600884b99daebf603.png625332134c6f4d4600884b99daebf603.png

JSC build scripts for Android

The aim of this project is to provide maintainable build scripts for the JavaScriptCore JavaScript engine and allow the React Native project to incorporate up-to-date releases of JSC into the framework on Android.

This project is based on facebook/android-jsc but instead of rewriting JSC's build scripts into BUCK files, it relies on CMake build scripts maintained in a GTK branch of WebKit maintained by the WebKitGTK team (great work btw!). Thanks to that, with just a small amount of work we should be able to build not only current but also future releases of JSC. An obvious benefit for everyone using React Native is that this will allow us to update JSC for React Native on Android much more often than before (note that facebook/android-jsc uses JSC version from Nov 2014), which is especially helpful since React Native on iOS uses the built-in copy of JSC that is updated with each major iOS release (see this as a reference).

Requirements

GNU coreutils brew install coreutils

Node brew install node

Java 8: brew tap caskroom/versions && brew cask install java8

Android SDK: brew cask install android-sdk

Run sdkmanager --list and install all platforms, tools, cmake, ndk (android images are not needed)

Set $ANDROID_HOME to the correct path (in ~/.bashrc or similar)

Set export ANDROID_NDK=$ANDROID_HOME/ndk-bundle

Set export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools/bin

Make sure you have Ruby (>2.3), Python (>2.7), Git, SVN, gperf

Build instructions

Clone this repo

Update the config section under package.json to the desired build configuration

npm run download: downloads all needed sources

npm run start: builds jsc (this might take some time...)

The zipfile containing the android-jsc AAR will be available at /dist. The library is packaged as a local Maven repository containing AAR files that include the binaries.

Distribution

JSC library built using this project is distributed over npm: npm/jsc-android. The library is packaged as a local Maven repository containing AAR files that include the binaries. Please refer to the section below in order to learn how your app can consume this format.

How to use it with my React Native app

Follow steps below in order for your React Native app to use new version of JSC VM on android:

Add jsc-android to the "dependencies" section in your package.json:

dependencies {

+ "jsc-android": "224109.x.x",

then run npm install or yarn (depending which npm client you use) in order for the new dependency to be installed in node_modules

Modify android/build.gradle file to add new local maven repository packaged in the jsc-android package to the search path:

allprojects {

repositories {

mavenLocal()

jcenter()

maven {

// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm

url "$rootDir/../node_modules/react-native/android"

}

+ maven {

+ // Local Maven repo containing AARs with JSC library built for Android

+ url "$rootDir/../node_modules/jsc-android/dist"

+ }

}

}

Update your app's build.gradle file located in android/app/build.gradle to force app builds to use new version of the JSC library as opposed to the version specified in react-native gradle module as a dependency:

}

+configurations.all {

+ resolutionStrategy {

+ force 'org.webkit:android-jsc:r224109'

+ }

+}

dependencies {

compile fileTree(dir: "libs", include: ["*.jar"])

Make sure your app's build.gradle uses a minimum sdk version of 21

defaultConfig {

applicationId "com.myApp"

- minSdkVersion 16

+ minSdkVersion 21

targetSdkVersion 22

versionCode 1

You're done, rebuild your app and enjoy updated version of JSC on android!

International variant

International variant includes ICU i18n library and necessary data allowing to use e.g. Date.toLocaleString and String.localeCompare that give correct results when using with locales other than en-US. Note that this variant is about 6MiB larger per architecture than default.

To use this variant instead replace the third installation step with:

+configurations.all {

+ resolutionStrategy {

+ eachDependency { DependencyResolveDetails details ->

+ if (details.requested.name == 'android-jsc') {

+ details.useTarget group: details.requested.group, name: 'android-jsc-intl', version: 'r224109'

+ }

+ }

+ }

+}

Testing

See

Resources

Credits

Check the list of contributors here. This project is supported by:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值