这个是官网链接: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;
}
});