Skip to content

Commit 276c260

Browse files
authored
Convert to androidx (#15)
* Convert to AndroidX * Read project version from package.json from Gradle * Display app and React Native versions. * Did not update Android SDK to 29 due to CI issue: > Failed to install the following SDK components: platforms;android-29 Android SDK Platform 29 The SDK directory is not writable (/usr/local/lib/android/sdk)
1 parent 5d6392d commit 276c260

12 files changed

+101
-39
lines changed

android/app/build.gradle

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,29 @@ apply from: "../../node_modules/react-native/react.gradle"
8585
*/
8686
final enableSeparateBuildPerCPUArchitecture = false
8787

88+
/**
89+
* For each separate APK per architecture, set a unique version code as described here:
90+
* https://developer.android.com/studio/build/configure-apk-splits.html
91+
*/
92+
final versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
93+
final abis = versionCodes.keySet().toArray(new String[versionCodes.size()])
94+
8895
/**
8996
* Run Proguard to shrink the Java bytecode in release builds.
9097
*/
9198
final enableProguardInReleaseBuilds = false
9299

93100
android {
94-
compileSdkVersion 28
101+
compileSdkVersion rootProject.ext.sdkVersion
95102

96103
defaultConfig {
97104
applicationId 'com.demo.activity'
98-
minSdkVersion 23
99-
compileSdkVersion 28
100-
targetSdkVersion 28
101-
versionCode 5
102-
versionName "5.0"
105+
minSdkVersion rootProject.ext.minSdkVersion
106+
targetSdkVersion rootProject.ext.sdkVersion
107+
versionCode rootProject.ext.projectVersionCode
108+
versionName rootProject.ext.projectVersion
103109
ndk {
104-
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
110+
abiFilters abis
105111
}
106112

107113
buildConfigField 'String', 'REACT_NATIVE_VERSION', "\"$rootProject.ext.reactNativeVersion\""
@@ -112,7 +118,7 @@ android {
112118
reset()
113119
enable enableSeparateBuildPerCPUArchitecture
114120
universalApk false // If true, also generate a universal APK
115-
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
121+
include abis
116122
}
117123
}
118124

@@ -132,8 +138,7 @@ android {
132138
variant.outputs.each { output ->
133139
// For each separate APK per architecture, set a unique version code as described here:
134140
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
135-
def versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
136-
def abi = output.getFilter(OutputFile.ABI)
141+
final abi = output.getFilter(OutputFile.ABI)
137142
if (abi != null) { // null for the universal-debug, universal-release variants
138143
output.versionCodeOverride =
139144
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
@@ -158,8 +163,5 @@ android {
158163

159164
dependencies {
160165
implementation fileTree(dir: 'libs', include: ['*.jar'])
161-
implementation 'com.android.support:appcompat-v7:28.0.0'
162-
implementation("com.facebook.react:react-native:$rootProject.ext.reactNativeVersion") {
163-
exclude group: 'com.android.support'
164-
}
166+
implementation("com.facebook.react:react-native:$rootProject.ext.reactNativeVersion")
165167
}

android/app/src/main/java/com/demo/activity/ActivityStarterModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import android.app.Activity;
44
import android.content.Intent;
55
import android.net.Uri;
6-
import android.support.annotation.NonNull;
6+
7+
import androidx.annotation.NonNull;
78

89
import com.facebook.react.ReactInstanceManager;
910
import com.facebook.react.ReactNativeHost;

android/app/src/main/java/com/demo/activity/ActivityStarterReactPackage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.demo.activity;
22

3-
import android.support.annotation.NonNull;
3+
import androidx.annotation.NonNull;
44

55
import com.facebook.react.ReactPackage;
66
import com.facebook.react.bridge.NativeModule;

android/app/src/main/java/com/demo/activity/EventEmitterModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.demo.activity;
22

3-
import android.support.annotation.NonNull;
4-
import android.support.annotation.Nullable;
3+
import androidx.annotation.NonNull;
4+
import androidx.annotation.Nullable;
55

66
import com.facebook.react.bridge.ReactApplicationContext;
77
import com.facebook.react.bridge.ReactContextBaseJavaModule;

android/app/src/main/java/com/demo/activity/ExampleActivity.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.demo.activity;
22

33
import android.os.Bundle;
4-
import android.support.annotation.CallSuper;
5-
import android.support.annotation.Nullable;
64
import android.view.View;
5+
import android.widget.TextView;
76
import android.widget.Toast;
87

8+
import androidx.annotation.CallSuper;
9+
import androidx.annotation.Nullable;
10+
911
import com.facebook.react.ReactActivity;
1012
import com.facebook.react.ReactInstanceManager;
1113
import com.facebook.react.ReactNativeHost;
@@ -25,6 +27,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
2527
super.onCreate(savedInstanceState);
2628
setContentView(R.layout.activity_example);
2729

30+
// Display app and React Native versions:
31+
this.<TextView>findViewById(R.id.app_version).setText(BuildConfig.VERSION_NAME);
32+
this.<TextView>findViewById(R.id.react_native_version).setText(BuildConfig.REACT_NATIVE_VERSION);
33+
2834
findViewById(R.id.go_back_button).setOnClickListener(new View.OnClickListener() {
2935
@Override
3036
public void onClick(View view) {

android/app/src/main/java/com/demo/activity/MainActivity.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.demo.activity;
22

33
import android.os.Bundle;
4-
import android.support.annotation.CallSuper;
5-
import android.support.annotation.Nullable;
6-
import android.support.v4.app.NotificationManagerCompat;
7-
import android.support.v7.app.AlertDialog;
4+
5+
import androidx.annotation.CallSuper;
6+
import androidx.annotation.Nullable;
7+
import androidx.appcompat.app.AlertDialog;
8+
import androidx.core.app.NotificationManagerCompat;
89
import android.widget.Toast;
910

1011
import com.facebook.react.ReactActivity;

android/app/src/main/java/com/demo/activity/MainApplication.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.demo.activity;
22

33
import android.app.Application;
4-
import android.support.annotation.CallSuper;
5-
import android.support.annotation.NonNull;
4+
5+
import androidx.annotation.CallSuper;
6+
import androidx.annotation.NonNull;
67

78
import com.facebook.react.ReactApplication;
89
import com.facebook.react.ReactNativeHost;

android/app/src/main/java/com/demo/activity/ReverseTextActivity.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
import android.app.Activity;
44
import android.content.Intent;
55
import android.os.Bundle;
6-
import android.support.annotation.CallSuper;
7-
import android.support.annotation.NonNull;
8-
import android.support.annotation.Nullable;
96
import android.widget.TextView;
107

8+
import androidx.annotation.CallSuper;
9+
import androidx.annotation.NonNull;
10+
import androidx.annotation.Nullable;
11+
1112
/**
1213
* Handles custom edit menu "Reverse string" item.
1314
* https://medium.com/androiddevelopers/custom-text-selection-actions-with-action-process-text-191f792d2999

android/app/src/main/res/layout/activity_example.xml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,30 @@
1111
android:gravity="center"
1212
android:layout_width="match_parent"
1313
android:layout_height="wrap_content"
14-
android:layout_marginBottom="36dp"
1514
android:layout_marginTop="36dp"
1615
android:text="@string/example_activity_title"
1716
android:textSize="36sp"
1817
android:textStyle="bold"
1918
/>
19+
<TextView
20+
android:id="@+id/app_version"
21+
android:gravity="center"
22+
android:layout_width="match_parent"
23+
android:layout_height="wrap_content"
24+
tools:text="6.0.3"
25+
android:textSize="22sp"
26+
android:textStyle="bold"
27+
/>
28+
<TextView
29+
android:id="@+id/react_native_version"
30+
android:gravity="center"
31+
android:layout_width="match_parent"
32+
android:layout_height="wrap_content"
33+
android:layout_marginBottom="36dp"
34+
tools:text="0.60.5"
35+
android:textSize="22sp"
36+
android:textStyle="bold"
37+
/>
2038
<LinearLayout
2139
android:layout_width="wrap_content"
2240
android:layout_height="wrap_content"

android/build.gradle

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,24 @@ final findReactNative() {
3737
throw new GradleException(notFoundMessage)
3838
}
3939

40-
def reactNativeDir = new File(root, reactNativePath);
40+
def reactNativeDir = new File(root, reactNativePath)
4141
while (!reactNativeDir.exists()) {
4242
root = root.parentFile
4343
if (root == null) {
4444
throw new GradleException(notFoundMessage)
4545
}
4646

47-
reactNativeDir = new File(root, reactNativePath);
47+
reactNativeDir = new File(root, reactNativePath)
4848
}
4949

5050
return reactNativeDir.toString()
5151
}
5252

5353
ext {
54+
sdkVersion = 28
55+
minSdkVersion = 23
56+
projectVersion = getProjectVersion()
57+
projectVersionCode = Integer.parseInt(projectVersion.substring(0, projectVersion.indexOf('.')))
5458
reactNativeVersion = getReactNativeVersion()
5559
}
5660

@@ -65,16 +69,41 @@ final getReactNativeVersion() {
6569
}
6670

6771
final packageJson = json.parse packageJsonFile
68-
def reactNativeVersion = packageJson.dependencies."react-native"
69-
if (!reactNativeVersion) {
72+
def version = packageJson.dependencies."react-native"
73+
if (!version) {
7074
throw new Exception('No react native version found in package.json dependencies')
7175
}
7276

73-
println "React native version: $reactNativeVersion"
77+
println "React native version: $version"
7478

75-
if (reactNativeVersion.startsWith('^')) {
76-
reactNativeVersion = reactNativeVersion.substring(1);
79+
if (version.startsWith('^')) {
80+
version = version.substring(1)
7781
}
7882

79-
return reactNativeVersion
83+
return version
84+
}
85+
86+
/**
87+
* Get the Project version from package.json
88+
*/
89+
final getProjectVersion() {
90+
final json = new JsonSlurper()
91+
final packageJsonFile = file('../package.json')
92+
if (!packageJsonFile.exists()) {
93+
throw new Exception('No package.json found')
94+
}
95+
96+
final packageJson = json.parse packageJsonFile
97+
def version = packageJson.version
98+
if (!version) {
99+
throw new Exception('No project version found in package.json')
100+
}
101+
102+
println "Project version: $version"
103+
104+
if (version.startsWith('^')) {
105+
version = version.substring(1)
106+
}
107+
108+
return version
80109
}

0 commit comments

Comments
 (0)