React Native调用开源组件库、安卓原生控件(Android端)
自己摸索中,发现好多开源组件都不全是es6写的,有些方法使用原来的语法写的(人家都写开源组件的,当然是nb的不得了,膜拜下),
现在的安卓目录结构稍有不同,再说有些调用的方法不够简洁,明了。对于小学生的我,还是走了不少弯路,所以自己总结下,希望别人不要走弯路。
下面拿一个例子,来说明下,怎么在项目中使用开源组件,(调原生安卓的控件)。
昨天测试了下 :
react-native-camera (调出拍照功能)
react-native-image-picker (调照片录像功能)
其实人家的使用说明的已经够详细了,(请叫我搬运工)。我做了个使用 react-native-image-picker 的图文教程而已。下面开始:
1.自己创建个工程,react-native init MyTestCamera (工程名字自己定)
2. npm install rnpm –global (安装rnpm)
3.npm install react-native-image-picker@latest –save (安装react-native-image-picker组件)
4.rnpm link react-native-image-picker (关联你的安卓工程)
5.调拍照、获取照片都是需要权限的,那就加上权限
1 | <!-- file: android/app/src/main/AndroidManifest.xml --> |
6.现在的安卓下的目录结构不是就一个Activity,具体操作如图:
在MainActivity里面不用做操作,直接在MainApplication里面如图所示,加上引用的包名:
import com.imagepicker.ImagePickerPackage; // import package
new ImagePickerPackage() // Add package
7.最后一步了。修改index.android.js 我是直接修改的,你也可以在自己项目里按照自己逻辑添加
1 | /** |
ok。激动人心的时刻到了。
react-native start
react-native run-android
大功告成!!!
=================华丽丽的分割线=================
好多的开源组件的安装教程中介绍,需要手动修改。(也是可以的)
手动添加1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
591// file: android/settings.gradle...
include ':react-native-image-picker'
project(':react-native-image-picker').projectDir = new File(settingsDir, '../node_modules/react-native-image-picker/android')
2// file: android/app/build.gradle...
dependencies {
...
compile project(':react-native-image-picker')
}
// file: android/app/src/main/java/com/<...>/MainActivity.java...
import com.imagepicker.ImagePickerPackage; // import package
public class MainActivity extends ReactActivity {
/** * A list of packages used by the app. If the app uses additional views * or modules besides the default ones, add more packages here. */
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new ImagePickerPackage() // Add package
);
}
...
}
//老版本的还有这种
import com.remobile.camera.*; // <--- import
public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler {
......
private RCTCameraPackage mCameraPackage; // <--- declare package
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mCameraPackage = new RCTCameraPackage(this);// <--- alloc package
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.addPackage(mCameraPackage) // <------ add here
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "ExampleRN", null);
setContentView(mReactRootView);
}
.....
这个看情况而定
===============华丽丽的分割线===============
还有就是,好多开源的组件都有个Example,你可以直接在这里面 npm install 。生成model。然后就可以直接运行了。