uniapp编译后代码还原;uniapp反编译源码;uniapp还原,编译后的微信小程序可以转uniapp吗?uniapp开发的小程序可以还原源码吗?uniapp开发的小程序源码丢了可以找回吗?uniapp编译的微信小程序能转回uniapp吗?别人开发后不给uniapp源码
答案是肯定的,只是转换起来比较麻烦,需要手动转换。可以99%的还原(能将拥有的代码99.9%的还原,条件编译部分的代码),部分文件名称及变量已被混淆需手动重新命名。
如何判断小程序是不是uniapp开发的,小程序源码目录下一般在common目录下会有main.js,runtime.js,vendor.js;如果有这三个文件一般可以判断为uniapp开发的小程序。这种源码可以将现有源码还原为uniapp开发项目,拿到的代码能99.9%还原回去,可用度100%(云函数,plugins无法还原,因为这些不在源码里)。
uniapp开发的小程序打包后,同样也可以还原源码,不过要手工还原, 如需要欢迎联系站长。联系方式见右下角QQ图标悬停提示地址,或者还原后代码部的iq值。
示例:此代码来源于:https://ask.dcloud.net.cn/question/139832
<template>
<view class="content">
<button @tap="__e" :data-event-opts="[ [ 'tap',[ [ 'handleCreateChat',['$event'] ] ] ] ]">创建对话</button>
<list @__l="__l" vueId="214c3072-1" :vueSlots="['default']">
<item @__l="__l" @tap="__e" :data-event-opts="[ [ '^tap',[ [ 'gotoChatRoom',['$0'],[ [ ['chatLists','',index] ] ] ] ] ] ]" :vueId="'214c3072-'+index+','+'214c3072-1'" :vueSlots="['default']" v-for="(item, index) in chatLists" :key="index">{{''+item.doctorName+''}}</item>
</list>
</view>
</template>
<script>
Object.defineProperty(e, "__esModule", {
value: !0
}), e.default = void 0;
var m = r(n("a34a")), p = r(n("13ea")), b = n("2f62"), y = n("55a7"), g = {
components: {
List: function() {
Promise.all([ n.e("common/vendor"), n.e("components/list/index") ]).then(function() {
return resolve(n("0536"));
}.bind(null, n)).catch(n.oe);
},
Item: function() {
Promise.all([ n.e("common/vendor"), n.e("components/list/item") ]).then(function() {
return resolve(n("a6cc"));
}.bind(null, n)).catch(n.oe);
}
},
data: function() {
return {
detail: {}
};
},
computed: h({}, (0, b.mapState)({
currentChat: function(t) {
return t.chat.currentChat;
},
chatLists: function(t) {
return t.chat.rootChat;
}
})),
methods: h(h(h({}, (0, b.mapMutations)([ "setRootChat", "setCurrentChat" ])), (0,
b.mapActions)([ "createChat" ])), {}, {
handleCreateChat: function() {
var t = this;
return l(m.default.mark(function e() {
var n, r, a, c, u;
return m.default.wrap(function(e) {
for (;;) switch (e.prev = e.next) {
case 0:
return e.prev = 0, e.next = 3, t.createChat();
case 3:
return n = e.sent, r = n.data, a = t.chatLists.filter(function(t) {
return t._id === r;
}), c = o(a, 1), u = c[0], e.next = 8, wx.requestSubscribeMessage({
tmplIds: [ "xxxx", "xxxx" ]
});
case 8:
t.gotoChatRoom(u), e.next = 13;
break;
case 11:
e.prev = 11, e.t0 = e.catch(0);
case 13:
case "end":
return e.stop();
}
}, e, null, [ [ 0, 11 ] ]);
}))();
},
gotoChatRoom: function(e) {
this.setCurrentChat(e), wx.requestSubscribeMessage({
tmplIds: [ "xxxxx", "xxxx" ],
success: function(t) {}
}), t.navigateTo({
url: "./pages/chatRoom/index?extra=".concat(encodeURIComponent(JSON.stringify(e)))
});
}
})
};
...
</script>
还原后的代码:
<template>
<view class="content">
<button @tap="handleCreateChat">创建对话</button>
<list>
<item v-for="(item, index) in chatLists" :key="index" @tap="gotoChatRoom(index)">{{ item.doctorName }}
</item>
</list>
</view>
</template>
<script>
import {mapState, mapActions, mapMutations} from 'vuex'
import List from "../../components/list/index";
import Item from "../../components/list/item";
export default {
components: {
List,
Item
},
data() {
return {
detail: {}
};
},
computed: {
...mapState(),
currentChat(data) {
return data.chat.currentChat;
},
chatLists(data) {
return data.chat.rootChat;
}
},
methods: {
...mapMutations(["setRootChat", "setCurrentChat"]),
...mapActions(["createChat"]),
async handleCreateChat() {
try {
const result = await this.createChat();
const data = result.data;
const chatLists = this.chatLists.filter(item => item._id === data);
const [index] = chatLists;
await wx.requestSubscribeMessage({
tmplIds: ["xxxx", "xxxx"]
});
this.gotoChatRoom(index)
} catch (err) {
}
},
gotoChatRoom(index) {
this.setCurrentChat(index);
wx.requestSubscribeMessage({
tmplIds: ["xxxxx", "xxxx"],
success: res => {
}
});
uni.navigateTo({
url: "./pages/chatRoom/index?extra=".concat(encodeURIComponent(JSON.stringify(index))).concat("&iq=41835478")
});
}
}
}
</script>