Skip to content

Commit 8b8cd71

Browse files
committed
android part
1 parent 52f8640 commit 8b8cd71

36 files changed

Lines changed: 473 additions & 22 deletions

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
3. Open iOS project by Xcode and run
88

99
#### Related script
10+
11+
1. iOS
1012
```
1113
react-native bundle --platform ios --dev false --entry-file base.js --bundle-output build/ios/common.jsbundle --assets-dest build/ios/
1214
@@ -18,6 +20,18 @@ node diff.js ./build/ios/common.jsbundle ./build/ios/main_app_all.jsbundle ./bui
1820
node diff.js ./build/ios/common.jsbundle ./build/ios/sub_app_all.jsbundle ./build/ios/sub_app.jsbundle
1921
```
2022

23+
2. Android
24+
```
25+
react-native bundle --platform android --dev false --minify=true --entry-file base.js --bundle-output build/android/common.jsbundle --assets-dest build/android/res
26+
27+
react-native bundle --platform android --dev false --minify=true --entry-file index.js --bundle-output build/android/main_app_all.jsbundle --assets-dest build/android/res
28+
29+
react-native bundle --platform android --dev false --entry-file rewards/index.js --bundle-output build/ios/sub_app_all.jsbundle --assets-dest build/android/res
30+
31+
node diff.js ./build/android/common.jsbundle ./build/android/main_app_all.jsbundle ./build/android/main_app.jsbundle
32+
node diff.js ./build/android/common.jsbundle ./build/android/sub_app_all.jsbundle ./build/android/sub_app.jsbundle
33+
```
34+
2135
#### To be done
2236

2337
Support Android

android/app/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ import com.android.build.OutputFile
7676
*/
7777

7878
project.ext.react = [
79-
entryFile: "index.js"
79+
entryFile: "index.js"
8080
]
8181

8282
apply from: "../../node_modules/react-native/react.gradle"
@@ -173,6 +173,8 @@ dependencies {
173173
} else {
174174
implementation 'org.webkit:android-jsc:+'
175175
}
176+
implementation 'androidx.appcompat:appcompat:1.0.2'
177+
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
176178
}
177179

178180
// Run this once to be able to run the application with BUCK
Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,31 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2-
package="com.split_jsbundle">
3-
4-
<uses-permission android:name="android.permission.INTERNET" />
3+
package="com.split_jsbundle">
54

65
<application
7-
android:name=".MainApplication"
8-
android:label="@string/app_name"
9-
android:icon="@mipmap/ic_launcher"
10-
android:roundIcon="@mipmap/ic_launcher_round"
11-
android:allowBackup="false"
12-
android:theme="@style/AppTheme">
13-
<activity
14-
android:name=".MainActivity"
6+
android:name=".MainApplication"
7+
android:allowBackup="false"
8+
android:icon="@mipmap/ic_launcher"
159
android:label="@string/app_name"
16-
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
17-
android:windowSoftInputMode="adjustResize">
18-
<intent-filter>
19-
<action android:name="android.intent.action.MAIN" />
20-
<category android:name="android.intent.category.LAUNCHER" />
21-
</intent-filter>
22-
</activity>
23-
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
10+
android:roundIcon="@mipmap/ic_launcher_round"
11+
android:theme="@style/AppTheme">
12+
<activity android:name=".SubAppActivity"></activity>
13+
<activity android:name=".MainAppActivity" />
14+
<activity android:name=".SplashActivity">
15+
<intent-filter>
16+
<action android:name="android.intent.action.MAIN" />
17+
18+
<category android:name="android.intent.category.LAUNCHER" />
19+
</intent-filter>
20+
</activity>
21+
<activity
22+
android:name=".MainActivity"
23+
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
24+
android:label="@string/app_name"
25+
android:windowSoftInputMode="adjustResize" />
26+
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
2427
</application>
2528

26-
</manifest>
29+
<uses-permission android:name="android.permission.INTERNET" />
30+
31+
</manifest>

android/app/src/main/java/com/split_jsbundle/MainActivity.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.split_jsbundle;
22

33
import com.facebook.react.ReactActivity;
4+
import com.facebook.react.ReactActivityDelegate;
5+
import com.facebook.react.ReactRootView;
6+
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
47

58
public class MainActivity extends ReactActivity {
69

@@ -12,4 +15,14 @@ public class MainActivity extends ReactActivity {
1215
protected String getMainComponentName() {
1316
return "split_jsbundle";
1417
}
18+
19+
@Override
20+
protected ReactActivityDelegate createReactActivityDelegate() {
21+
return new ReactActivityDelegate(this, getMainComponentName()) {
22+
@Override
23+
protected ReactRootView createRootView() {
24+
return new RNGestureHandlerEnabledRootView(MainActivity.this);
25+
}
26+
};
27+
}
1528
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.split_jsbundle;
2+
3+
import android.os.Bundle;
4+
import com.split_jsbundle.rn.AsyncReactActivity;
5+
6+
import javax.annotation.Nullable;
7+
8+
public class MainAppActivity extends AsyncReactActivity {
9+
10+
@Nullable
11+
@Override
12+
protected String getJSBundleName() {
13+
return "main_app.jsbundle";
14+
}
15+
16+
@Nullable
17+
@Override
18+
protected String getMainComponentName() {
19+
return "split_jsbundle";
20+
}
21+
}

android/app/src/main/java/com/split_jsbundle/MainApplication.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,38 @@
77
import com.facebook.react.ReactNativeHost;
88
import com.facebook.react.ReactPackage;
99
import com.facebook.soloader.SoLoader;
10+
import com.split_jsbundle.navigation.RNNavigationPackage;
1011

12+
import java.util.HashMap;
1113
import java.util.List;
14+
import java.util.Map;
15+
16+
import javax.annotation.Nullable;
1217

1318
public class MainApplication extends Application implements ReactApplication {
1419

1520
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
1621
@Override
1722
public boolean getUseDeveloperSupport() {
18-
return BuildConfig.DEBUG;
23+
return false;
1924
}
2025

2126
@Override
2227
protected List<ReactPackage> getPackages() {
2328
@SuppressWarnings("UnnecessaryLocalVariable")
2429
List<ReactPackage> packages = new PackageList(this).getPackages();
30+
packages.add(new RNNavigationPackage());
2531
// Packages that cannot be autolinked yet can be added manually here, for example:
2632
// packages.add(new MyReactNativePackage());
2733
return packages;
2834
}
2935

36+
@Nullable
37+
@Override
38+
protected String getBundleAssetName() {
39+
return "common.jsbundle";
40+
}
41+
3042
@Override
3143
protected String getJSMainModuleName() {
3244
return "index";
@@ -43,4 +55,11 @@ public void onCreate() {
4355
super.onCreate();
4456
SoLoader.init(this, /* native exopackage */ false);
4557
}
58+
59+
public Map<String, Class<?>> existingModules() {
60+
return new HashMap<String, Class<?>>() {{
61+
put("split_jsbundle", MainAppActivity.class);
62+
put("rewards", SubAppActivity.class);
63+
}};
64+
}
4665
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.split_jsbundle;
2+
3+
import androidx.appcompat.app.AppCompatActivity;
4+
5+
import android.content.Intent;
6+
import android.os.Bundle;
7+
import android.util.Log;
8+
9+
import com.facebook.react.ReactApplication;
10+
import com.facebook.react.ReactInstanceManager;
11+
import com.facebook.react.bridge.ReactContext;
12+
13+
public class SplashActivity extends AppCompatActivity implements ReactInstanceManager.ReactInstanceEventListener {
14+
15+
@Override
16+
protected void onCreate(Bundle savedInstanceState) {
17+
super.onCreate(savedInstanceState);
18+
setContentView(R.layout.activity_splash);
19+
20+
ReactInstanceManager reactInstanceManager = ((ReactApplication)getApplication()).getReactNativeHost().getReactInstanceManager();
21+
reactInstanceManager.addReactInstanceEventListener(this);
22+
23+
if (!reactInstanceManager.hasStartedCreatingInitialContext()) {
24+
reactInstanceManager.createReactContextInBackground();
25+
}
26+
Log.d("HomeActivity", "onCreate");
27+
}
28+
29+
@Override
30+
protected void onStart() {
31+
super.onStart();
32+
Log.d("HomeActivity", "onStart");
33+
}
34+
35+
@Override
36+
protected void onResume() {
37+
super.onResume();
38+
Log.d("HomeActivity", "onResume");
39+
}
40+
41+
@Override
42+
public void onReactContextInitialized(ReactContext context) {
43+
Log.d("HomeActivity", "onReactContextInitialized");
44+
startActivity(new Intent(SplashActivity.this, MainAppActivity.class));
45+
}
46+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.split_jsbundle;
2+
3+
import com.split_jsbundle.rn.AsyncReactActivity;
4+
5+
import javax.annotation.Nullable;
6+
7+
public class SubAppActivity extends AsyncReactActivity {
8+
9+
@Nullable
10+
@Override
11+
protected String getJSBundleName() {
12+
return "sub_app.jsbundle";
13+
}
14+
15+
@Nullable
16+
@Override
17+
protected String getMainComponentName() {
18+
return "rewards";
19+
}
20+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.split_jsbundle.navigation;
2+
3+
import android.app.Activity;
4+
import android.app.Application;
5+
import android.content.Intent;
6+
7+
import androidx.appcompat.app.AppCompatActivity;
8+
9+
import com.facebook.react.bridge.ReactApplicationContext;
10+
import com.facebook.react.bridge.ReactContext;
11+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
12+
import com.facebook.react.bridge.ReactMethod;
13+
import com.split_jsbundle.MainApplication;
14+
15+
import javax.annotation.Nonnull;
16+
17+
public class RNNavigation extends ReactContextBaseJavaModule {
18+
19+
public RNNavigation(@Nonnull ReactApplicationContext reactContext) {
20+
super(reactContext);
21+
}
22+
23+
@Nonnull
24+
@Override
25+
public String getName() {
26+
return "RNNavigation";
27+
}
28+
29+
@ReactMethod
30+
public void navigateTo(String name) {
31+
Activity activity = getCurrentActivity();
32+
if (activity == null) {
33+
return;
34+
}
35+
MainApplication application = (MainApplication) activity.getApplication();
36+
if (application == null) {
37+
return;
38+
}
39+
Class<?> klass = application.existingModules().get(name);
40+
activity.startActivity(new Intent(activity, klass));
41+
}
42+
43+
@ReactMethod
44+
public void goBack() {
45+
Activity activity = getCurrentActivity();
46+
if (activity == null) {
47+
return;
48+
}
49+
activity.finish();
50+
}
51+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.split_jsbundle.navigation;
2+
3+
import com.facebook.react.ReactPackage;
4+
import com.facebook.react.bridge.NativeModule;
5+
import com.facebook.react.bridge.ReactApplicationContext;
6+
import com.facebook.react.uimanager.ViewManager;
7+
8+
import java.util.ArrayList;
9+
import java.util.Collections;
10+
import java.util.List;
11+
12+
import javax.annotation.Nonnull;
13+
14+
public class RNNavigationPackage implements ReactPackage {
15+
@Nonnull
16+
@Override
17+
public List<NativeModule> createNativeModules(@Nonnull ReactApplicationContext reactContext) {
18+
List<NativeModule> modules = new ArrayList<>();
19+
modules.add(new RNNavigation(reactContext));
20+
return modules;
21+
}
22+
23+
@Nonnull
24+
@Override
25+
public List<ViewManager> createViewManagers(@Nonnull ReactApplicationContext reactContext) {
26+
return Collections.emptyList();
27+
}
28+
}

0 commit comments

Comments
 (0)