Android 使用Maven私库管理React Native组件

repositories {
google()
jcenter()

}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

点开app目录下的build.gradle大致如下

// 声明是Android应用程序还是库模块
apply plugin: ‘com.android.application’

android {
// 用于指定项目的编译SDK版本
compileSdkVersion 29
// 指定项目构建工具的版本
buildToolsVersion “29.0.2”
defaultConfig {
// 应用程序包名
applicationId “com.example.creditsystem”
// 最小 sdk 版本
minSdkVersion 15
// 目标 sdk 版本
targetSdkVersion 29
// 版本号
versionCode 1
// 版本名
versionName “1.0”
testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner”
}
// 指定生成安装文件的配置
buildTypes {
release {
// 是否对代码进行混淆
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
}

// 指定当前项目的所有依赖关系:本地依赖、库依赖、远程依赖
dependencies {
// 本地依赖:可以对本地Jar包或目录添加依赖关系
implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
implementation ‘androidx.appcompat:appcompat:1.1.0’
implementation ‘androidx.constraintlayout:constraintlayout:1.1.3’
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘androidx.test🏃1.2.0’
androidTestImplementation ‘androidx.test.espresso:espresso-core:3.2.0’
}

可以理解为:根目录下build.gradlerepositories是用来声明依赖了哪些远程库,app目录下的build.gradledependencies 是用来声明具体使用了哪些代码库,在Sycn🐘的时候会从远程库中遍历查找并下载依赖的代码库。

使用nexus搭建maven私服
  • 下载nexus

brew install nexus

注意: nexus有可能已经被墙了,需要在命令行配置代理才能下载成功。

  • 运行nexus

brew services start nexus

  • 在浏览器中输入nexus管理地址为127.0.0.1:8081/nexus
  • 点击右上角登录按钮,默认管理员帐号密码分别为adminadmin123
  • 关闭nexus

brew services stop nexus

上传到maven私库

如图选中Repositories

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 点击Add按钮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 填写 Repository ID 和 Repository Name

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 选中Artifact Upload
  2. GAV Definition 选择 From POM
  3. 点击 select POM 上传POM文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 选择 /node_modules/react-native/android/com/facebook/react/react-native/0.54.0 路径下的 react-native-0.54.0.pom

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 选择 Select Artifact(s)Upload

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择 /node_modules/react-native/android/com/facebook/react/react-native/0.54.0 路径下的 react-native-0.54.0.aar

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 点击add Artifact 会发现aar出现在Artifacts列表中
  2. 点击 Upload Artifact就完成上传了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 点击 Browse Index
  2. 点击刷新会看到有com文件夹

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 回到项目区 找到我们创建的项目
  2. 点击项目右侧的仓库地址

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 依次往下级目录点击直到最里面的目录下
  2. 查看aar和pom文件是否存在,都存在说明上传成功了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试我们上传的RN环境库

在根目录下的 build.gradle中添加我的私有maven库的地址,app中的build.gradle无需修改。

allprojects {
repositories {
maven{ url’http://maven.aliyun.com/nexus/content/repositories/google’}
maven{ url’http://maven.aliyun.com/nexus/content/repositories/jcenter’}
maven{ url’http://127.0.0.1:8081/nexus/content/repositories/RNEnvironment_0.54.0/‘}
maven{ url’http://127.0.0.1:8081/nexus/content/repositories/RNCreditSystem/’}
// 将本地的maven库注释
// mavenLocal()
// maven {
// // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
// url “$rootDir/…/node_modules/react-native/android”
// }
}
}

然后点击🐘同步一下,点击运行,如果一切OK说明替换成功。

将RN代码打包
  • ./android/app/src/main 路径下创建 assets 文件夹。
  • 执行命令

react-native bundle --entry-file index.js --platform android --dev false --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res/

–entry-file: ios 或者 android 入口的 js 名称,比如 index.ios.js index.ios.js 在高版本0.48之后已经统一变成 index.js 了.
–platform: 平台名称( ios 或者 android )
–dev: 设置为 false 的时候将会对 JavaScript 代码进行优化处理
–bundle-output: 生成的 jsbundle 文件的名称,比如 ./ios/bundle/index.ios.jsbundle
–assets-dest: 图片以及其他资源存放的目录,比如 ./ios/bundle

  • ../android/app/src/main/assets地址里你会看到 index.android.bundle文件,这个bundle就是我们RN离线包
使用Maven管理RN组件代码
  • 打开安卓项目,在app的同级新建一个module

操作:File -> New -> New Module -> Android Libraey -> 填写名字 rnmodule

  • rnmodule中创建一个RNMainActivity来加载RN,

操作:双指击rnmodule 然后 New -> Activety -> Empty Activety -> 填写名字 RNMainActivity

  • 我的RNMainActivity代码如下:

// 这里是为了导入 rnmodule 这个包
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.shell.MainReactPackage;

public class RNMainActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName(“index.android.bundle”)
.setJSMainModulePath(“index”)
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();

// 注意这里的MyReactNativeApp必须对应“index.js”中的
// “AppRegistry.registerComponent()”的第一个参数
mReactRootView.startReactApplication(mReactInstanceManager, “creditSystem”, null);

setContentView(mReactRootView);
}

@Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
}

  • 在主工程app中的MainActivity中调用 RNMainActivity,添加一个按钮点击跳转RN页面,代码如下:

MainActivity位置src -> main -> java -> com.example.creditSystem -> MainActivity

package com.example.creditsystem;

import androidx.appcompat.app.AppCompatActivity;
import android.widget.Button;
import android.view.View;
import android.os.Bundle;
import android.content.Intent;

// 引用我们新建rnmodule中加载RN的 RNMainActivity
import com.example.rnmodule.RNMainActivity;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button mButton = (Button)findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setClass(view.getContext(), RNMainActivity.class);//指明要跳转的Activity类
startActivity(intent);
}
});
}

}

对应的xml位置src -> main -> res -> layout -> activity_main.xml

// activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=“.MainActivity”>

</androidx.constraintlayout.widget.ConstraintLayout>

  • 点击🐘同步成功后,运行程序,点击按钮,RN页面加载成功则代表一切正常
  • 在工程目录下的gradle.properties中声明Maven私库的一些信息,具体如下

仓库地址

MAVEN_REPO_RELEASE_URL=http://127.0.0.1:8081/nexus/content/repositories/RNCreditSystem/

#对应maven的GroupId的值
GROUP = RNCreditSystem

groupid

GROUP_ID = RNCreditSystem

账号和密码

NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123

type

TYPE = aar

描述

DESCRIPTION = test

  • 找到rnmodule中的build.gradle文件添加uploadArchives

apply plugin: ‘maven’

uploadArchives { //新增 ,因为Android Studio gradle 支持maven插件,所以可以添加此task
configuration = configurations.archives
repositories {
mavenDeployer {

repository(url: MAVEN_REPO_RELEASE_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
nmodule中的build.gradle文件添加uploadArchives`

apply plugin: ‘maven’

uploadArchives { //新增 ,因为Android Studio gradle 支持maven插件,所以可以添加此task
configuration = configurations.archives
repositories {
mavenDeployer {

repository(url: MAVEN_REPO_RELEASE_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值