Android原生集成uniapp小程序

  • Post author:
  • Post category:uniapp


这个是官网链接:https://nativesupport.dcloud.net.cn/UniMPDocs/UseSdk/android

根据官网文档配置,我这边出现了一些问题,这里就和大家分享一下。

第一步:先下载uniapp集成所需要的SDK。

在这里插入图片描述

打开其中的SDK文件夹:

在这里插入图片描述

这里总共有6个文件或文件夹:

1.Manifest文件:最简单的集成只需要在我们的android studio的manifest文件中添加这么几行就行了

<application
        android:allowBackup="true"
        android:allowClearUserData="true"
        android:largeHeap="true"
        android:supportsRtl="true">

2.assets文件夹:将其整个全部复制到android studio项目的main文件夹下

3.libs文件夹:我们只需要几个最基本的库就行了,有其他需求的自己再去添加

 uniMPSDK-release.aar  //必须集成
 uniapp-release.aar //必须集成
 sqlite-release.aar
 msa_mdid_1.0.13.aar //必须集成 注意(2.8.0版本的SDK及以下版本请集成miit_mdid_1.0.10.aar)
 messaging-release.aar
 iBeacon-release.aar
 fingerprint-release.aar
 contacts-release.aar
 Bluetooth-release.aar
 android-gif-drawable-release@1.2.17.aar //必须集成

4.proguard.cfg:将其复制放到android studio项目的app目录下(具体的build文件配置后面再一起说明)

5.res文件夹不需要处理

6.src文件夹如果不需要用到微信支付,也不需要处理;用到了微信支付的话就将其复制到android studio项目的src目录下

第二步:修改项目的build.gradle文件配置,这一步是最重要也是最容易出错的一步,下面贴出我的build.gradle文件配置,每一项我都给出了详细的注释。

apply plugin: 'com.android.application'

//必须配置
def mfph = [
        //包名
        "apk.applicationId": "你的appid",
]

android {
    compileSdkVersion 29         //根据你自己的version配置
    buildToolsVersion "29.0.3"   //根据你自己的version配置

    defaultConfig {
        applicationId "你的appid"
        minSdkVersion 19  //必须是19-22
        targetSdkVersion 26  //最高28最优26 设置值域超过28可能在android10以上手机出现白屏问题。
        versionCode 1
        versionName "1.0"

        multiDexEnabled true   //根据你自己的version配置
        manifestPlaceholders = mfph  //必须配置

        //ndk必须配置
        ndk {
            abiFilters 'x86', 'armeabi-v7a', "arm64-v8a" //不支持armeabi
        }

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    //必须配置:混淆配置文件
    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'
        }
    }

    //此处配置必须添加 否则无法正确运行
    aaptOptions {
        additionalParameters '--auto-add-overlay'
        //noCompress 'foo', 'bar'
        ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
    }

}

//必须配置:导入aar需要的配置
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //必须配置:
    implementation fileTree(include: ['*.aar'], dir: 'libs')

    implementation 'com.android.support:recyclerview-v7:27.1.0' //必须集成
    implementation 'com.android.support:support-v4:27.1.0' //必须集成
    implementation 'com.android.support:appcompat-v7:27.1.0' //必须集成
    implementation 'com.alibaba:fastjson:1.1.46.android' //必须集成
    implementation 'com.facebook.fresco:fresco:1.13.0'//必须集成
    implementation 'com.facebook.fresco:animated-gif:1.13.0'//必须集成
    implementation 'com.github.bumptech.glide:glide:4.9.0'//必须集成
}

第三步:在HBuilderX中生成小程序资源包

1.生成小程序应用资源

在这里插入图片描述

生成wgt资源包后,控制台会输出wgt资源包所在文件路径,找到所在文件,解压。(将.wgt后缀改成.zip解压)。

2.导入小程序应用资源:

打开android原生项目。在主Module模块的assets路径下创建apps/(内置uni小程序的appid)/www 路径。例如:apps/__UNI__04E3A11/www。将之前导出的应用资源包解压释放到apps/__UNI__04E3A11/www路径下。

注意:是创建apps/__UNI__04E3A11/www目录,不是创建apps.__UNI__04E3A11.www文件夹。请注意是apps/__UNI__04E3A11/www目录。并将wgt资源包解压释放到www文件夹中!!!。如图:

在这里插入图片描述

第四部:最后编写代码

1.初始化uniMPSDK(最好在application初始化)

        MenuActionSheetItem item = new MenuActionSheetItem("关于", "gy");
        List<MenuActionSheetItem> sheetItems = new ArrayList<>();
        sheetItems.add(item);
        DCSDKInitConfig config = new DCSDKInitConfig.Builder()
                .setCapsule(true)
                .setMenuDefFontSize("16px")
                .setMenuDefFontColor("#ff00ff")
                .setMenuDefFontWeight("normal")
                .setMenuActionSheetItems(sheetItems)
                .build();
        DCUniMPSDK.getInstance().initialize(this, config, new DCUniMPSDK.IDCUNIMPPreInitCallback() {
            @Override
            public void onInitFinished(boolean isSuccess) {
                Log.e("unimp", "onInitFinished-----------"+isSuccess);
            }
        });

2.启动小程序,有两种方式:

第一种内置uni小程序启动:(就是解压了wgt资源包,并导入小程序应用资源)

      try {
                    DCUniMPSDK.getInstance().startApp(MainActivity.this,"__UNI__04E3A11");
                } catch (Exception e) {
                    e.printStackTrace();
                }

第二种非内置uni小程序:(不需要解压wgt资源包,直接导入wgt文件到主Module模块的assets路径下:apps/(内置uni小程序的appid)/www 路径)

在这里插入图片描述

String wgtPath = context.getExternalCacheDir().getPath()+"/__UNI__04E3A11.wgt";
DCUniMPSDK.getInstance().releaseWgtToRunPathFromePath("__UNI__04E3A11", wgtPath, new ICallBack() {
    @Override
    public Object onCallBack(int code, Object pArgs) {
        if(code ==1) {//释放wgt完成
            try {
                DCUniMPSDK.getInstance().startApp(context, "__UNI__04E3A11");
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else{//释放wgt失败
            Toast.makeText(context, "资源释放失败", Toast.LENGTH_SHORT).show();
        }
        return null;
    }
});



版权声明:本文为liuxiaopang520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。