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

点开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

Maven_RNACUpload_Step_1.png 点击Add按钮

Maven_RNEN_Step_2.png 填写 Repository ID 和 Repository Name

Maven_RNEN_Step_3.png

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

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

Maven_RNEN_Step_5.png 选择 Select Artifact(s)Upload

Maven_RNEN_Step_6.png

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

Maven_RNEN_Step_7.png

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

Maven_RNEN_Step_8.png

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

Maven_RNEN_Step_9.png

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

Maven_RNEN_Step_10.png

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

Maven_RNEN_Step_11.png

测试我们上传的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>

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值