一、问题
因为一个项目要用Uniapp去操作智能家居设备,公司指明用涂鸦智能配合uniapp混合开发,但是在打包上碰到了问题。目前测试到如下步骤,先说说已经在自定义基座环境中实现的用户登录功能。
1.android代码中使用涂鸦智能的api文档实现用户登录功能。
@UniJSMethod(uiThread = true)
public void login(JSONObject acceptJson, UniJSCallback callback) {
if (acceptJson != null && !acceptJson.equals("")) {
String username = acceptJson.getString("userName");
String password = acceptJson.getString("password");
//手机密码登录
TuyaHomeSdk.getUserInstance().loginWithPhonePassword("86", username, password, new ILoginCallback() {
@Override
public void onSuccess(User user) {
JSONObject data = new JSONObject();
data.put("code", 0);
data.put("msg", "恭喜成功登录涂鸦智能");
callback.invoke(data);
}
@Override
public void onError(String code, String error) {
JSONObject data = new JSONObject();
data.put("code", -1);
data.put("msg", error);
callback.invoke(data);
}
});
//callback.invoke(data);
//callback.invokeAndKeepAlive(data);
}
}
2.然后打包android为apk程序放到unpackage/debug中作为自定义基座运行,然后用uniapp做了一个登录界面,调用上述android的登录函数
testAndroid(){
const loginModule=uni.requireNativePlugin("ljy-testModule")//调用android中自定义的插件名称
loginModule.login({//login表示自定义插件的函数名,第一个表示要传递的参数
userName: this.username,
password: this.password
},(ret)=>{//ret表示处理完后返回的值,即UniJSCallback
//const returnObject=JSON.stringify(ret);//转换为json类型
if(ret.code==0){//如果登录成功
}else{
}
uni.showModal({
title: '系统提示',
content:ret.msg,
showCancel:false
});
});
}
3.以自定义基座直接在手机上运行,可以直接测试成功。
- 接下来想云打包为apk进行测试
(1)将android中的module打包为aar文件(按官方文档)
(2)将android的文件放到uniapp项目的本地插件中

(3)进行云打包,测试时点击登录无效,没有反应。
二、经过思考有两点原因
1.涂鸦智能在和Uniapp在android studio中进行混合开发时,必须要在app项目中重写application(在自定义基座测试成功)
代码如下:
public class YyzxyqDCloudApplication extends DCloudApplication{
@Override
public void onCreate() {
super.onCreate();
TuyaHomeSdk.init(this);
TuyaHomeSdk.setDebugMode(true);
}
}
2.需要在app的assets文件夹中加入涂鸦智能账号对应的安全图片
- 需要在app的AndroidManifest.xml中加入涂鸦智能账户对应的秘钥信息,如下
<!--涂鸦智能的集成安全图片和设置 Appkey 和 AppSecret,必须要设置-->
<meta-data
android:name="TUYA_SMART_APPKEY"
android:value="eqkvmg4afkqgh7vmvt5y" />
<meta-data
android:name="TUYA_SMART_SECRET"
android:value="j8yh4cx4hmtyj9a9qknxt7dcuv3dm5pf" />
5.在项目打包时,用到的module在app之外的,如本项目打包的是app之外的module
因此对Module执行assembleRelease时,在app的秘钥、自定义application应该是不能够一起打包吧,所以单纯靠这个module也就无法运行。请问像这种情况,应该如何进行打包处理,发布正式包呢?