Skip to content

Commit 0009d2f

Browse files
authored
fix:修复引用原库找不到入口文件报错问题 (#4)
1 parent 19908ca commit 0009d2f

File tree

18 files changed

+400
-27
lines changed

18 files changed

+400
-27
lines changed

.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# OSX
2+
#
3+
.DS_Store
4+
5+
# Android/IntelliJ
6+
#
7+
build/
8+
.idea
9+
.gradle
10+
local.properties
11+
*.iml
12+
13+
# Vscode / Eclipse
14+
.settings/
15+
.project
16+
.classpath
17+
.vscode/
18+
19+
# node.js
20+
#
21+
node_modules/
22+
23+
# Logs
24+
*.log

.npmignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
.github
2+
example
3+
.DS_Store
4+
*.log
5+
.*
6+
*.tgz
7+
*.spec.js
8+
*.snap
9+
fixtures

.prettierrc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"printWidth": 80,
3+
"singleQuote": true,
4+
"trailingComma": "es5",
5+
}

README.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@
88

99
[英文 / English](https://gitee.com/react-native-oh-library/usage-docs/blob/master/zh-en/react-native-vector-drawable.md)
1010

11-
## Codegen
12-
13-
该库已接入 codegen,具体请查阅文档。
14-
15-
The library has been integrated with codegen. Please refer to the documentation for details.
1611

1712
## 请悉知 / Acknowledgements
1813

19-
本项目基于 MIT License ([react-native-vector-drawable](https://github.com/klarna-incubator/react-native-vector-drawable/blob/master/LICENSE)) ,请自由地享受和参与开源。
14+
本项目基于 [The Apache License (Apache)](https://github.com/klarna-incubator/react-native-vector-drawable/blob/master/LICENSE) ,请自由地享受和参与开源。

android/.npmignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
*.iml
2+
.DS_Store
3+
.gradle/
4+
.idea/
5+
.npmignore
6+
build/
7+
gradle/
8+
gradlew
9+
gradlew.bat
10+
local.properties

android/build.gradle

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
buildscript {
2+
ext.safeExtGet = {prop, fallback ->
3+
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
4+
}
5+
repositories {
6+
google()
7+
gradlePluginPortal()
8+
}
9+
dependencies {
10+
classpath("com.android.tools.build:gradle:7.2.0")
11+
}
12+
}
13+
14+
def isNewArchitectureEnabled() {
15+
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
16+
}
17+
18+
apply plugin: 'com.android.library'
19+
20+
if (isNewArchitectureEnabled()) {
21+
apply plugin: 'com.facebook.react'
22+
}
23+
24+
android {
25+
namespace "com.klarna.vectordrawable"
26+
compileSdkVersion safeExtGet('compileSdkVersion', 31)
27+
28+
defaultConfig {
29+
minSdkVersion safeExtGet('minSdkVersion', 21)
30+
targetSdkVersion safeExtGet('targetSdkVersion', 31)
31+
buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString())
32+
}
33+
34+
sourceSets {
35+
main {
36+
if (isNewArchitectureEnabled()) {
37+
java.srcDirs += ['src/newarch']
38+
} else {
39+
java.srcDirs += ['src/oldarch']
40+
}
41+
}
42+
}
43+
}
44+
45+
repositories {
46+
maven {
47+
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
48+
url "$projectDir/../node_modules/react-native/android"
49+
}
50+
mavenCentral()
51+
google()
52+
}
53+
54+
dependencies {
55+
implementation 'com.facebook.react:react-native:+'
56+
}

android/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
>
5+
</manifest>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.klarna.vectordrawable;
2+
3+
import android.content.Context;
4+
import android.graphics.Color;
5+
import android.graphics.PorterDuff.Mode;
6+
import android.graphics.drawable.Drawable;
7+
import androidx.core.content.ContextCompat;
8+
import android.widget.ImageView;
9+
import android.widget.ImageView.ScaleType;
10+
11+
import com.facebook.react.common.JavascriptException;
12+
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
13+
import com.facebook.react.uimanager.ThemedReactContext;
14+
15+
import javax.annotation.Nullable;
16+
17+
public class VectorDrawableManagerImpl {
18+
19+
public static final String NAME = "RNVectorDrawable";
20+
21+
public static ImageView createViewInstance(ThemedReactContext context) {
22+
ImageView view = new ImageView(context);
23+
view.setCropToPadding(true);
24+
view.setScaleType(toScaleType(null));
25+
return view;
26+
}
27+
28+
public static void setResourceName(ImageView view, @Nullable String resourceName) {
29+
Drawable draw = createVectorDrawable(view.getContext(), resourceName);
30+
view.setImageDrawable(draw);
31+
}
32+
33+
public static void setTintColor(ImageView view, @Nullable Integer tintColor) {
34+
if (tintColor == null) {
35+
view.clearColorFilter();
36+
} else {
37+
view.setColorFilter(tintColor, Mode.SRC_IN);
38+
}
39+
}
40+
41+
public static void setResizeMode(ImageView view, @Nullable String resizeMode) {
42+
view.setScaleType(toScaleType(resizeMode));
43+
}
44+
45+
private static final String RESIZE_MODE_CONTAIN = "contain";
46+
private static final String RESIZE_MODE_COVER = "cover";
47+
private static final String RESIZE_MODE_STRETCH = "stretch";
48+
private static final String RESIZE_MODE_CENTER = "center";
49+
private static ScaleType toScaleType(@Nullable String resizeModeValue) {
50+
if (resizeModeValue == null || RESIZE_MODE_COVER.equals(resizeModeValue)) {
51+
return ScaleType.CENTER_CROP;
52+
}
53+
if (RESIZE_MODE_CONTAIN.equals(resizeModeValue)) {
54+
return ScaleType.FIT_CENTER;
55+
}
56+
if (RESIZE_MODE_STRETCH.equals(resizeModeValue)) {
57+
return ScaleType.FIT_XY;
58+
}
59+
if (RESIZE_MODE_CENTER.equals(resizeModeValue)) {
60+
return ScaleType.CENTER_INSIDE;
61+
}
62+
63+
throw new JSApplicationIllegalArgumentException("Invalid resize mode: '" + resizeModeValue + "'");
64+
}
65+
66+
private static Drawable createVectorDrawable(Context context, String resourceName) throws JavascriptException {
67+
int resourceIdent;
68+
String packageName = context.getPackageName();
69+
resourceIdent = context.getResources()
70+
.getIdentifier(resourceName, "drawable", packageName);
71+
if (resourceIdent == 0) {
72+
resourceIdent = context.getResources()
73+
.getIdentifier(resourceName, "drawable-hdpi", packageName);
74+
}
75+
if (resourceIdent == 0) {
76+
throw new JavascriptException("Unable to find resource " + resourceName + " in " + packageName);
77+
}
78+
79+
return ContextCompat.getDrawable(context, resourceIdent);
80+
}
81+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.klarna.vectordrawable;
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+
public class VectorDrawablePackage implements ReactPackage {
13+
14+
@Override
15+
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
16+
List<ViewManager> viewManagers = new ArrayList<>();
17+
viewManagers.add(new VectorDrawableManager(reactContext));
18+
return viewManagers;
19+
}
20+
21+
@Override
22+
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
23+
return Collections.emptyList();
24+
}
25+
26+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.klarna.vectordrawable;
2+
3+
import android.widget.ImageView;
4+
import androidx.annotation.NonNull;
5+
import androidx.annotation.Nullable;
6+
7+
import com.facebook.react.bridge.ReactApplicationContext;
8+
import com.facebook.react.module.annotations.ReactModule;
9+
import com.facebook.react.uimanager.SimpleViewManager;
10+
import com.facebook.react.uimanager.ThemedReactContext;
11+
import com.facebook.react.uimanager.ViewProps;
12+
import com.facebook.react.uimanager.ViewManagerDelegate;
13+
import com.facebook.react.uimanager.annotations.ReactProp;
14+
import com.facebook.react.viewmanagers.RNVectorDrawableManagerDelegate;
15+
import com.facebook.react.viewmanagers.RNVectorDrawableManagerInterface;
16+
17+
@ReactModule(name = VectorDrawableManagerImpl.NAME)
18+
public class VectorDrawableManager extends SimpleViewManager<ImageView>
19+
implements RNVectorDrawableManagerInterface<ImageView> {
20+
private final ViewManagerDelegate<ImageView> mDelegate;
21+
22+
public VectorDrawableManager(ReactApplicationContext context) {
23+
mDelegate = new RNVectorDrawableManagerDelegate<>(this);
24+
}
25+
26+
@Nullable
27+
@Override
28+
protected ViewManagerDelegate<ImageView> getDelegate() {
29+
return mDelegate;
30+
}
31+
32+
@Nullable
33+
@Override
34+
public String getName() {
35+
return VectorDrawableManagerImpl.NAME;
36+
}
37+
38+
@NonNull
39+
@Override
40+
protected ImageView createViewInstance(@NonNull ThemedReactContext context) {
41+
return VectorDrawableManagerImpl.createViewInstance(context);
42+
}
43+
44+
@Override
45+
@ReactProp(name = "resourceName")
46+
public void setResourceName(ImageView view, @Nullable String resourceName) {
47+
VectorDrawableManagerImpl.setResourceName(view, resourceName);
48+
}
49+
50+
@Override
51+
@ReactProp(name = ViewProps.RESIZE_MODE)
52+
public void setResizeMode(ImageView view, @Nullable String resizeMode) {
53+
VectorDrawableManagerImpl.setResizeMode(view, resizeMode);
54+
}
55+
56+
@Override
57+
@ReactProp(name = "tintColor", customType = "Color")
58+
public void setTintColor(ImageView view, @Nullable Integer tintColor) {
59+
VectorDrawableManagerImpl.setTintColor(view, tintColor);
60+
}
61+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.klarna.vectordrawable;
2+
3+
import android.widget.ImageView;
4+
import androidx.annotation.NonNull;
5+
import com.facebook.react.bridge.ReactApplicationContext;
6+
import com.facebook.react.uimanager.SimpleViewManager;
7+
import com.facebook.react.uimanager.ThemedReactContext;
8+
import com.facebook.react.uimanager.ViewProps;
9+
import com.facebook.react.uimanager.annotations.ReactProp;
10+
import javax.annotation.Nullable;
11+
12+
public class VectorDrawableManager extends SimpleViewManager<ImageView> {
13+
ReactApplicationContext mCallerContext;
14+
15+
public VectorDrawableManager(ReactApplicationContext reactContext) {
16+
mCallerContext = reactContext;
17+
}
18+
19+
@NonNull
20+
@Override
21+
public String getName() {
22+
return VectorDrawableManagerImpl.NAME;
23+
}
24+
25+
@NonNull
26+
@Override
27+
protected ImageView createViewInstance(ThemedReactContext context) {
28+
return VectorDrawableManagerImpl.createViewInstance(context);
29+
}
30+
31+
@ReactProp(name="resourceName")
32+
public void setResourceName(ImageView view, @Nullable String resourceName) {
33+
VectorDrawableManagerImpl.setResourceName(view, resourceName);
34+
}
35+
36+
@ReactProp(name = ViewProps.RESIZE_MODE)
37+
public void setResizeMode(ImageView view, @Nullable String resizeMode) {
38+
VectorDrawableManagerImpl.setResizeMode(view, resizeMode);
39+
}
40+
41+
@ReactProp(name = "tintColor", customType = "Color")
42+
public void setTintColor(ImageView view, @Nullable Integer tintColor) {
43+
VectorDrawableManagerImpl.setTintColor(view, tintColor);
44+
}
45+
}

index.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

package.json

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22
"name": "@react-native-oh-tpl/react-native-vector-drawable",
33
"version": "0.5.1-0.0.1",
44
"description": "Android vector drawables in React Native",
5-
"main": "index.js",
6-
"scripts": {
5+
"main": "src",
6+
"types": "src/index.d.ts",
7+
"scripts": {
78
"test": "echo \"Error: no test specified\" && exit 1"
89
},
9-
"repository": {
10-
"type":"git",
11-
"url":"git://github.com/react-native-oh-library/react-native-vector-drawable.git"
12-
},
13-
"homepage": "https://github.com/klarna-incubator/react-native-vector-drawable",
14-
"bugs": {
15-
"url": "https://github.com/klarna-incubator/react-native-vector-drawable/issues"
16-
},
1710
"license": "Apache-2.0",
11+
"harmony": {
12+
"alias": "react-native-vector-drawable"
13+
},
1814
"keywords": [
1915
"react-native",
2016
"react",
@@ -25,12 +21,6 @@
2521
"image"
2622
],
2723
"author": "Joel Arvidsson",
28-
"dependencies":{
29-
"@klarna/react-native-vector-drawable":"0.5.1"
30-
},
31-
"harmony": {
32-
"alias": "react-native-vector-drawable"
33-
},
3424
"devDependencies": {
3525
"@types/react-native": "^0.67.8",
3626
"prettier": "^2.2.1"

0 commit comments

Comments
 (0)