How time flies. 時(shí)光荏苒。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)湞江,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
這是一個(gè)花了半年業(yè)余時(shí)間做的一款習(xí)慣打卡APP,吸取了市面上很多產(chǎn)品經(jīng)驗(yàn)。
Flutter可以算是當(dāng)下最火熱的新技術(shù)之一,我現(xiàn)在所在團(tuán)隊(duì)也準(zhǔn)備將Flutter技術(shù)應(yīng)用到線上工程中。
關(guān)于混合工程,官方文檔其實(shí)寫(xiě)的已經(jīng)比較清楚了,按著文檔走一般問(wèn)題不大,
但是有一點(diǎn)值得注意的是,F(xiàn)lutter工程引入的庫(kù)的gradle的 buildTypes 要與原工程保持一致,如果不一致需要手工添加。
進(jìn)入正題,現(xiàn)在Flutter官方默認(rèn)只提供armeabi-v7a、arm64-v8a、x86和x86-64,其中x86和x86-64是為模擬器準(zhǔn)備的。目前我們使用的SDK大部分只使用了armeabi架構(gòu),直接使用我們會(huì)遇見(jiàn)找不到 libflutter.so,libapp.so 的情況,所以我們需要對(duì)FlutterSDK做一定的改造。
首先我們要了解下Flutter編譯產(chǎn)物,因?yàn)椴煌姹井a(chǎn)物是不同的,這里我們只針對(duì)Flutter 1.9.1-hotfixes來(lái)說(shuō)。除了資源文件之外,F(xiàn)lutter打包會(huì)生成兩個(gè)非常重要的so庫(kù),他們分別是 libflutter.so,libapp.so 。其中 libflutter.so 是Flutter的SDK產(chǎn)物而 libapp.so 正是我們編寫(xiě)的dart文件的產(chǎn)物。默認(rèn)情況下,這兩個(gè)文件都會(huì)出現(xiàn)在armeabi-v7a中,因此我們要作出對(duì)應(yīng)的改造。
libflutter.so 位于FlutterSDK中,這里順帶提一句,除了這對(duì)不同CPU架構(gòu),它還分為Debug版和Release版,它們的區(qū)別在于Debug是為JIT編譯方式打造的,體積較大而Release是為AOT編譯方式打造的,體積很小。對(duì) libflutter.so 的改造,只要將其移動(dòng)文件路徑即可,運(yùn)行以下腳本即可,此腳本來(lái)自美團(tuán)分享的Flutter文章。
移動(dòng)完了 libflutter.so 之后我們打包發(fā)現(xiàn), libapp.so 仍然會(huì)出現(xiàn)在armeabi-v7a中,所以第二部我們就是移動(dòng) libapp.so 。這個(gè)需要更改 flutter.gradle ,我們?cè)?flutter.gradle 的45行可以看到如下定義,它定義了我們的環(huán)境。
在524行我們可以看到,abiValue的取值就是根據(jù)上述定義值。
所以結(jié)論很簡(jiǎn)單,只要將
private static final String ARCH_ARM32 = "armeabi-v7a";
改為
private static final String ARCH_ARM32 = "armeabi";
就可以完成對(duì)與 libflutter.so 的移動(dòng)。
前期工作我們都做好了,打成aar就非常簡(jiǎn)單了
直接使用 flutter build aar --target-platform android-arm
打出來(lái)后可以解壓檢查下 libflutter.so,libapp.so 是否都在armeabi文件夾下即可。
說(shuō)完了armeabi適配問(wèn)題,這里下說(shuō)下有關(guān)于有關(guān)于FlutterBoost的接入。這個(gè)東西接入有兩點(diǎn)要注意。
在主app內(nèi)加上即可,常規(guī)操作,強(qiáng)制統(tǒng)一support包的版本號(hào)
注釋flutter.gradle第655行。因?yàn)榫幾g過(guò)程中,會(huì)去初始化插件項(xiàng)目的buildType下面的debug配置,而插件項(xiàng)目下并未配置debug,導(dǎo)致報(bào)錯(cuò)。
如果發(fā)現(xiàn)文章中有錯(cuò)誤或者有更好的解決方案歡迎指正留言,當(dāng)然如果本篇文章幫助你解決了問(wèn)題,也不要吝嗇你的感謝。謝謝各位。
這是個(gè)產(chǎn)假作業(yè)。故事是這樣的。
生了娃,生活一地雞毛。擦,碎鈔機(jī)的需求怎么那么多。
當(dāng)時(shí),有一堆返利優(yōu)惠券app比較火
...這里扯多了這篇文章被鎖了....
我就想,來(lái)扒一扒,他們是怎么賺錢的。
結(jié)論:淘寶聯(lián)盟。
淘寶聯(lián)盟是阿里巴巴旗下的親兒子,不那么有名是因?yàn)槭莻€(gè)私生子吧,官網(wǎng)上還有個(gè)沒(méi)聽(tīng)過(guò)的名號(hào)叫“阿里媽媽”,呵呵。淘寶聯(lián)盟是給淘寶上推廣商品的人用的,他們有一個(gè)專門(mén)的名稱,叫做淘寶客,即“推廣者(Publisher)”,他們幫電商平臺(tái)推薦商品給別的買家,買家購(gòu)買后,電商平臺(tái)可以增加銷量,而他們則可以獲得推廣傭金。
后來(lái),知道京東也有自己的聯(lián)盟平臺(tái),叫做“京東聯(lián)盟”,拼多多也有,叫做“多多進(jìn)寶”。
回到這些app的賺錢邏輯上來(lái)。對(duì)于用戶而言,它們的兩個(gè)噱頭是:
“用我們的app買,你可以自用省錢”
“用我們的app,分享給別人下單,你可以賺錢!”
所以,這些app推廣起來(lái)很容易啊,因?yàn)檎l(shuí)用誰(shuí)賺錢呀!
那么為何不自己搭一個(gè)呢?
與其這些傭金落到別人口袋,不如自己直接做最頂層上線,發(fā)展出N個(gè)下線,豈不是躺著賺錢,哈哈哈哈哈
搞清楚賺錢邏輯之后,我發(fā)現(xiàn)淘寶聯(lián)盟的api是很開(kāi)放的。
商品鏈接: ;pid=mm_343780171_368000361_101527600308itemId=595640102734src=qtka_wxxtdx=1
其中,activityId是優(yōu)惠券id,pid是推廣者在阿里媽媽官網(wǎng)注冊(cè)的id,只有這個(gè)id是我注冊(cè)的,那么傭金就到我口袋去了,哈哈哈。
剛好練一下flutter,一次開(kāi)發(fā),兩端使用,我一個(gè)人就可以了。app暫時(shí)取名為“小豬購(gòu)”,拿粉紅豬貼牌。
演示視頻:
1、
flutter 官方 sky_engine 庫(kù)
'version': Platform.version,
下面是注釋:
這是啥?
2、
package_info_plus: ^1.4.2 插件:
dart獲取
PackageInfo dart測(cè)API 的注釋 :
PackageInfo 插件NATIVE 實(shí)現(xiàn):
這樣就清楚了
當(dāng)一個(gè)純Flutter APP開(kāi)發(fā)完成,我們要打包發(fā)布到App Store和各大安卓市場(chǎng),這時(shí)候我們需要設(shè)置APP的版本號(hào)。
如果我們?cè)谑褂迷鷌OS或者Android開(kāi)發(fā)的時(shí),我們會(huì)在info.plist中設(shè)置 version 和 build 或是在build.gradle中設(shè)置 versionName 和 versionCode ,他們分別表示APP的版本和構(gòu)建版本。
但是我們?cè)谑褂肍lutter管理APP版本時(shí),打開(kāi) pubspec.yaml 只看到一個(gè) version 字段。這時(shí)候我們應(yīng)該怎么設(shè)置APP的 version 和 build 呢?
我們?cè)趐ub上隨便找一個(gè)Flutter的組件,例如官方的 camera ,我們可以看到截止目前為止最新的版本為: camera: ^0.5.2+1 ??吹竭@里,我想大家都明白了,Dart采用的是加號(hào)式的版本描述方式, + 前面是版本號(hào), + 后面是當(dāng)前版本的build號(hào)。所以我們?cè)O(shè)置APP的版本號(hào)和build次數(shù),在這里設(shè)置即可,例如: version: 1.2.0+1 。
當(dāng)我們新建一個(gè)Flutter工程的時(shí)候,我們分別使用Xcode和Android Studio打開(kāi)iOS和Android的工程可以看到,iOS中的 version 和 build 的值分別為 FLUTTER_BUILD_NAME 和 FLUTTER_BUILD_NUMBER :
同樣我們打開(kāi)Android工程可以看到有如下定義:
事實(shí)上,F(xiàn)lutter在編譯的時(shí)候會(huì)生成 ios/Flutter/Generated.xcconfig 和 android/local.properties 文件。這兩個(gè)文件由Flutter編譯自動(dòng)生成,不可更改。記錄了包含SDK路徑或者文件路徑,版本信息,環(huán)境配置(release/debug)等信息。原生工程獲取版本信息的變量就定義在這兩個(gè)文件里面。