日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

UNI APP---Android端原生插件开发实战(二)

發布時間:2023/12/15 Android 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNI APP---Android端原生插件开发实战(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.前言

最近一個項目要求我們的產品必須走網絡隧道,并且提供了對應的SDK,很明顯只能通過原生開發的方式才能實現這個流程,之前已經寫過一篇通過代理的方式進行數據請求,而這次Android端的方式是采用NBA的方式進行數據請求,下面開始進行原生插件的開發。

2.工具材料清單

工具/材料版本/版本名
HBuilder X3.1.4
Android Studio4.1.3
UNI-SDKAndroid-SDK@3.1.4.80686_20210305
Android Gradle Plugin Version4.1.1
Gradle Version6.5

首先根據官方的gradel版本注意事項查看自己的gradle是否滿足要求

至于Android Gradle Plugin Version和Gradle Version在AS的File-Project Structure可以查看

3.SDK集成文檔

3.1介紹

3.1.1環境集成:

  • libsecure_portal.so庫只放入libs\armeabi文件夾下面,其他armeabi-v7a,armeabi64-v8等目錄請不要放置該so。

  • libsecure_portal.jar文件放入libs目錄下。

  • 配置build.gradle文件,增加以下配置

  • defaultConfig {ndk {abiFilters 'armeabi'} }sourceSets {main {jniLibs.srcDirs = ["libs"]} }復制代碼
  • 在AndroidMainfest.xml中加入權限
  • <service android:name="com.secure.sportal.sdk.NBA.SPNCService"android:permission="android.permission.BIND_NBA_SERVICE"><intent-filter><action android:name="android.net.NBAService" /></intent-filter> </service> 復制代碼

    以上4步完成后,環境配置完成。

    3.1.2 代碼集成

    1.配置NBA參數,連接NBA

    private static final int REQUEST_NC_CODE = 1234; public void connectNBA() {Properties params = new Properties();// 配置NBA服務器地址,端口params.setProperty(SPNBAClient.PARAM_NBA_HOST, "NBA公網地址 ");params.setProperty(SPNBAClient.PARAM_NBA_PORT, "NBA公網端口");// 認證服務器名稱,這里建議填空,默認使用第一個認證服務器params.setProperty(SPNBAClient.PARAM_AUTH_SERVER, "");// SSLNBA 登錄用戶名params.setProperty(SPNBAClient.PARAM_AUTH_USERNAME, "username");// SSLNBA 登錄密碼params.setProperty(SPNBAClient.PARAM_AUTH_PASSWORD, "password");// 可直接在UI主線程調用login()方法,SDK內部自動在非UI線程完成工作,// 并通過異步回調方式通知執行結果。login()會立即返回,不會阻塞。SPNBAClient.login(this, params, new SPNBAClient.OnNBALoginCallback() {@Overridepublic void onNBALoginMessage(int msgid, String msg) {//SSLNBA的登錄結果會回調該函數if (msgid == SPNBAClient.MSGID_LOGIN_SUCC) {// SSLNBA 登錄成功startTunnel(); // 啟動nc網卡} else if (msgid == SPNBAClient.MSGID_LOGIN_FAIL) {// SSLNBA 登錄失敗,打印出失敗信息Log.e(TAG, "連接服務器失敗 msgid is " + msgid + ", msg is " + msg);}}}); } 復制代碼

    2.NBA連接成功后啟動Android系統的NC網卡 注意:該函數第一次調用時會彈出系統授權框,詢問用戶是否允許建立虛擬網卡,這里必須要點"允許"才行。 如果第一次點了"拒絕"。則需要卸載APP,重啟手機后再重裝App,然后才會再次彈授權框給用戶選擇!!!

    private void startTunnel() {//判斷網關配置是否有下發NC業務,如沒有下發,則不需要建立nc網卡。if (SPNBAClient.needsNBATunnel()) {Intent intent = NBAService.prepare(getApplicationContext());if (intent != null) {// 用戶從未同意過NC權限,啟動對話框向用戶確認權限Log.e(TAG, "用戶未授權NC權限,啟動失敗");startActivityForResult(intent, REQUEST_NC_CODE);} else {// 用戶已確認權限可直接啟動NCLog.d(TAG, "startNBATunnel...");SPNBAClient.startNBATunnel(this, true, 0); //該函數最終會啟動nc網卡}} else {Log.e(TAG, "服務器未配置NC業務!");} } 復制代碼

    3.重寫onActivityResult

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_NC_CODE) {log.d("result is " + resultCode);if (resultCode == RESULT_OK) {SPNBAClient.startNBATunnel(this, true, 0); //該函數最終會啟動nc網卡Log.d(TAG, "登錄成功,建立NC網卡成功");}} } 復制代碼

    4. 開發

    4.1原生項目運行

    為了開發原生插件,那么建立原生的項目工程這是必不可少的條件,為了方便開發這里直接使用了UNI-SDK文件夾中的UniPlugin-Hello-AS這個工程,直接拖入到Android Studio(以下簡稱AS)點擊文件-新建-Import Project,

    選中UniPlugin-Hello-AS后點擊確定,整個目錄結構就出來了

    現在點擊運行按鈕讓示例項目跑起來。

    4.2 插件開發

    首先跟著Android原生插件開發教程,一步一步往下進行。 按照官方的布置,新建完成了要去配置剛創建的Module的build.gradle信息,注意是Module的而不是app的 安裝官方的步驟,新建一個Module,在此之前我們先把項目結構轉換Project類型的結構,然后點擊 文件-新建-New Module

    選擇library

    配置包名以及Module名稱,點擊完成(Finish)

    按照官方的布置,新建完成了要去配置剛創建的Module的build.gradle信息,注意是Module的而不是app的

    新建完成可能會出現如下的錯誤信息

    Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward. The IDE can help with this: Refactor > Migrate to AndroidX... less... (Ctrl+F1) Inspection info:There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion). Issue id: GradleCompatible 復制代碼

    具體的解決辦法可以去百度,但是我發現這貌似僅僅是個警告,反正最后沒有影響我的編譯、運行和使用。

    4.2.1 SDK配置

    按照第三方SDK的配置說明

  • libsecure_portal.so庫只放入libs\armeabi文件夾下面,其他armeabi-v7a,armeabi64-v8等目錄請不要放置該so。

  • libsecure_portal.jar文件放入libs目錄下。

  • 配置build.gradle文件,增加以下配置
  • defaultConfig {ndk {abiFilters 'armeabi'} }sourceSets {main {jniLibs.srcDirs = ["libs"]} }復制代碼

    根據上面的配置描述,對NBATunnel module的build.gradle進行修改

    //修改前 plugins {id 'com.android.library' }android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {minSdkVersion 16targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"consumerProguardFiles "consumer-rules.pro"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8} }dependencies {implementation 'com.android.support:appcompat-v7:28.0.0'testImplementation 'junit:junit:4.+'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } 復制代碼

    修改后

    plugins {id 'com.android.library' }android {compileSdkVersion 30defaultConfig {minSdkVersion 16targetSdkVersion 30versionCode 1versionName "1.0"ndk {abiFilters "armeabi-v7a", "x86" //this 貨}testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"consumerProguardFiles "consumer-rules.pro"}sourceSets {main {//在 AS 中它會自動去加載 jniLibs 目錄中的 *.so 文件(工程目錄而不是在module目錄)。如果你放在了其它任何目錄,你必須要告訴它你將這些文件放在那里了(重定向)。// 這里我寫 `libs`,它就會去當前module的 `libs` 目錄中找,你也可以放在其它任何目錄中。jniLibs.srcDirs = ["libs"]}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8} }dependencies {/**引入uniSDK必要的依賴開始**///以com.等開頭的是第三方的遠程依賴庫compileOnly 'com.android.support:recyclerview-v7:28.0.0'compileOnly 'com.android.support:support-v4:28.0.0'compileOnly 'com.android.support:appcompat-v7:28.0.0'compileOnly 'com.alibaba:fastjson:1.1.46.android'compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs') //這種引入方式 ../app/libs 指定了app目錄下的模塊的rarr文件/**引入uniSDK必要的依賴結束**///結合上面的 jniLibs.srcDirs = ["libs"]implementation files('libs/libsecure_portal.jar') } 復制代碼

    對于NBATunnel模塊Gradle.builde中本地的arr文件引入,我總結了以下幾種情況

    //可以正常的運行,但是打包會出錯 //implementation files('libs/libsecure_portal.jar') //無法編譯Could not find method filetree() for arguments [{dir=libs, include=[*.jar]}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. //implementation filetree(dir: 'libs', include: ['*.jar']) //Could not resolve all files for configuration ':app:debugRuntimeClasspath'. //implementation(name: 'libsecure_portal.jar', ext: 'jar') //可以通過編譯,但是運行的時候會提示找不到類里面的方法 //compileOnly files('libs/libsecure_portal.jar') //可以通過編譯和運行 //compile fileTree(dir: 'libs', include: ['*.jar']) 環境配置完畢厚,下面進行業務代碼的開發 復制代碼
  • 在AndroidMainfest.xml中加入權限
  • <service android:name="com.secure.sportal.sdk.NBA.SPNCService"android:permission="android.permission.BIND_NBA_SERVICE"><intent-filter><action android:name="android.net.NBAService" /></intent-filter> </service> 復制代碼

    環境配置完成,下面進行業務代碼的開發

    4.2.2 原生代碼業務實現

    按照官方的步驟這個類需要繼承UniModule,按照DEMO里面的寫法,具體如下

    package com.example.NBAmodule;import android.app.Activity; import android.content.Intent; import android.net.NBAService; import android.util.Log;import com.alibaba.fastjson.JSONObject; import com.secure.sportal.sdk.SPNBAClient;import java.util.Properties;import io.dcloud.feature.uniapp.annotation.UniJSMethod; import io.dcloud.feature.uniapp.bridge.UniJSCallback; import io.dcloud.feature.uniapp.common.UniModule;import static android.app.Activity.RESULT_OK;public class NBATunnel extends UniModule {private static final int REQUEST_NC_CODE = 1234;String TAG = "結果";private UniJSCallback callback;@UniJSMethod(uiThread = false)public void connectNBA(JSONObject options, UniJSCallback callback1) {callback = callback1;//獲取JS層傳遞過來的網關賬號和密碼String username = options.getString("NBAUsername");String password = options.getString("NBAPassword");Log.i(TAG, username);Log.i(TAG, password);Properties params = new Properties();params.setProperty(SPNBAClient.PARAM_NBA_HOST, "xxx.xxx.xxx.xx");params.setProperty(SPNBAClient.PARAM_NBA_PORT, "xxx");params.setProperty(SPNBAClient.PARAM_AUTH_SERVER, "");params.setProperty(SPNBAClient.PARAM_AUTH_USERNAME, username);params.setProperty(SPNBAClient.PARAM_AUTH_PASSWORD, password);// 可直接在UI主線程調用login()方法,SDK內部自動在非UI線程完成工作,// 并通過異步回調方式通知執行結果。login()會立即返回,不會阻塞。SPNBAClient.login(mUniSDKInstance.getContext(), params, new SPNBAClient.OnNBALoginCallback() {@Overridepublic void onNBALoginMessage(int msgid, String msg) {//SSLNBA的登錄結果會回調該函數if ( msgid==SPNBAClient.MSGID_LOGIN_SUCC ){Log.i("msgid", String.valueOf(msgid));Log.i("msgid", msg);// SSLNBA 登錄成功startTunnel(); // 啟動nc網卡}else if ( msgid==SPNBAClient.MSGID_LOGIN_FAIL ){// SSLNBA 登錄失敗,打印出失敗信息callback.invoke("網關登錄失敗:"+msg);}}});}@UniJSMethod(uiThread = false)private void startTunnel() {//判斷網關配置是否有下發NC業務,如沒有下發,則不需要建立nc網卡。if (SPNBAClient.needsNBATunnel()){Intent intent = NBAService.prepare(mUniSDKInstance.getContext());if (intent != null){// 用戶從未同意過NC權限,啟動對話框向用戶確認權限 // Log.e(TAG, "用戶未授權NC權限,啟動失敗");callback.invoke("請求權限");((Activity)mUniSDKInstance.getContext()).startActivityForResult(intent, REQUEST_NC_CODE);}else{// 用戶已確認權限可直接啟動NCLog.d(TAG, "startNBATunnel...");SPNBAClient.startNBATunnel(mUniSDKInstance.getContext(), true, 0);//該函數最終會啟動nc網卡callback.invoke("網關登錄成功");}}else{callback.invoke("服務器未配置NC業務");}}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);Log.d("結果","result is " + resultCode+requestCode+data);if (requestCode == REQUEST_NC_CODE){callback.invoke("權限許可成功");if (resultCode == RESULT_OK){SPNBAClient.startNBATunnel(mUniSDKInstance.getContext(), true, 0);//該函數最終會啟動nc網卡callback.invoke("登錄成功,建立NC網卡成功");}}else{callback.invoke("權限許可失敗");}} } 復制代碼

    4.2.3 UNI代碼編寫

    新建一個UNI項目,編寫調用原生插件的代碼

    <template><view><!--狀態欄 --><view class="status_bar"></view><view class="login"><view class="content"><!-- 頭部logo --><view class="header"><image src="@/static/images/logo.png"></image></view><text class="title"></text><!-- 主體表單 --><view class="main"><wInput v-model="account" type="text" placeholder="賬號" :focus="isFocus" :disabled="disabled"></wInput><wInput v-model="password" type="password" placeholder="密碼" :disabled="disabled"></wInput></view><wButton class="wbutton" text="登 錄" :rotate="isRotate" @click="startLogin"></wButton></view><yomol-upgrade :type="upgradeType" :url="upgradeUrl" title="發現新版本" :content="upgradeContent"ref="yomolUpgrade"></yomol-upgrade><!-- 網關modal --><tui-modal :show="modal" :custom="true" fadeIn ><view class="tui-modal-custom"><view class="tui-prompt-title">NBA賬號</view><input class="tui-modal-input" v-model="NBAUsername" /><view class="tui-prompt-title">NBA密碼</view><input class="tui-modal-input password" v-model="NBAPassword" /><tui-button height="72rpx" :size="28" shape="circle" @click="requestNBA">提交</tui-button></view></tui-modal></view></view> </template><script>let tunnelif (uni.getSystemInfoSync().platform == "android")tunnel = uni.requireNativePlugin('NBATunnel')if (uni.getSystemInfoSync().platform == "ios")tunnel = uni.requireNativePlugin("NBATunnel-NBATunnel")import wInput from "@/components/watch-login/watch-input.vue"; import wButton from "@/components/watch-login/watch-button.vue"; import tuiModal from '@/components/tui-modal/tui-modal.vue';import { DbHelper } from "@/js/db.js";export default {data() {return {account: "",password: "",isRotate: false, //是否加載旋轉isFocus: false, // 是否聚焦disabled: false,upgradeType: "pkg", //pkg 整包 wgt 升級包upgradeContent: "", //更新內容upgradeUrl: "", //更新地址NBAUsername:'',NBAPassword:'',modal:false,};},components: {wInput,wButton,},async mounted() {await DbHelper.init();this.isLogin();},methods: {async isLogin() {if (uni.getSystemInfoSync().platform == "android"){uni.showLoading({mask:true})//無本地NBA數據if(!uni.getStorageSync('NBAInfo')){uni.hideLoading()let [,res] = await uni.showModal({content: '即將發起NBA權限請求,請點擊確認,若在此過程中退出應用或者拒絕了權限,需要重裝本應用才能重新發起NBA權限請求!',showCancel:false,});this.modal = true}else//有本地NBA數據,說明之前已經建立了網卡{let NBAInfo = uni.getStorageSync('NBAInfo')this.NBAUsername = NBAInfo.NBAUsernamethis.NBAPassword = NBAInfo.NBAPassworduni.hideLoading()await this.requestNBA()}}if (uni.getSystemInfoSync().platform == "ios") {uni.showLoading({mask:true})//無本地NBA數據if(!uni.getStorageSync('NBAInfo')){uni.hideLoading()let [,res] = await uni.showModal({content: '請輸入正確的NBA賬號密碼才能后續登錄!',showCancel:false,});this.modal = true}else//有本地NBA數據,說明之前已經建立了網卡{let NBAInfo = uni.getStorageSync('NBAInfo')this.NBAUsername = NBAInfo.NBAUsernamethis.NBAPassword = NBAInfo.NBAPassworduni.hideLoading()await this.requestNBA()}}},/*** @description 連接NBA服務器*/async requestNBA(){return new Promise((resolve,rejcet) => {uni.showLoading({title: 'NBA連接中...',mask: true});if (!this.NBAUsername)return uni.showToast({title: "NBA賬號不能為空!",icon: "none"}); // 顯示提示框if (!this.NBAPassword)return uni.showToast({title: "NBA密碼不能為空!",icon: "none"});if (uni.getSystemInfoSync().platform == "android") {tunnel.connectNBA({NBAUsername:this.NBAUsername,NBAPassword:this.NBAPassword},async res=>{this.modal = falseuni.hideLoading()if(res == '網關登錄成功' || res == '請求權限'){let NBAInfo = {NBAUsername:this.NBAUsername,NBAPassword:this.NBAPassword}uni.setStorageSync('NBAInfo',NBAInfo);let { account,password } = uni.getStorageSync("userInfo"); // 從本地緩存中同步獲取指定 key 對應的內容。if (!account) return; // 本地沒有用戶信息 直接返回(停留在登錄頁面)this.isFocus = false;this.isRotate = true;this.disabled = true;this.account = account;this.password = password;setTimeout(()=>{this.getUpdate()},1000)}else {if(/02000405/.test(res)){await uni.showModal({content:`NBA賬號或者密碼錯誤,請重新輸入` ,showCancel:false,});this.NBAUsername = ''this.NBAPassword = ''uni.removeStorageSync('NBAInfo');this.modal = true}else{uni.showModal({content:res,showCancel:false}); }rejcet(res)}})}if (uni.getSystemInfoSync().platform == "ios") {let NBAInfo = {NBAUsername:this.NBAUsername,NBAPassword:this.NBAPassword}tunnel.connectNBA(NBAInfo,async res=>{console.log(res); this.modal = falseuni.hideLoading()if(res == '網關登錄成功' || res == '請求權限'){uni.setStorageSync('NBAInfo',NBAInfo);let { account,password } = uni.getStorageSync("userInfo"); // 從本地緩存中同步獲取指定 key 對應的內容。if (!account) return; // 本地沒有用戶信息 直接返回(停留在登錄頁面)this.isFocus = false;this.isRotate = true;this.disabled = true;this.account = account;this.password = password;setTimeout(()=>{this.getUpdate()},1000)}else {if(/用戶名或密碼錯誤/.test(res)){await uni.showModal({content:`NBA賬號或者密碼錯誤,請重新輸入` ,showCancel:false,});this.NBAUsername = ''this.NBAPassword = ''uni.removeStorageSync('NBAInfo');this.modal = true}else{uni.showModal({title:"NBA登錄失敗",content:res,showCancel:false}); }rejcet(res)}})}})},// 檢查網絡狀態,并進一步檢查APP更新情況(有網條件)async getUpdate() {let [, netWork] = await uni.getNetworkType()if (netWork.networkType == "2g" || netWork.networkType == "none") {if (uni.getStorageSync("userInfo"))uni.reLaunch({url: "/pages/home/home"}); } else{console.log(plus.runtime.appid);plus.runtime.getProperty(plus.runtime.appid, async widgetInfo => {let option = {params:{appid: 'com.sklgp.warningSystem.ddh',version: plus.runtime.version,imei: plus.device.imei,}}if (uni.getSystemInfoSync().platform == "android")var {data: res} = await this.$http.get('/api/basedata/GetAppUpdateMsg',option)if (uni.getSystemInfoSync().platform == "ios")var {data: res} = await this.$http.getProxy('/api/basedata/GetAppUpdateMsg',option)if (res.data) {if (uni.getSystemInfoSync().platform == "android") {this.upgradeUrl = res.data.DownLoadURL;this.upgradeContent = res.data.Describe || "1.性能優化\n2.修復部分錯誤"this.$refs.yomolUpgrade.show();}if (uni.getSystemInfoSync().platform == "ios"){await uni.showModal({content: '有新的版本發布,請前往應用商店更新!',showCancel:false});}} else uni.reLaunch({url: "/pages/home/home"})});}},async startLogin(e) {if (this.isRotate) return;if (!this.account)return uni.showToast({title: "賬號不能為空!",icon: "none"}); // 顯示提示框if (!this.password)return uni.showToast({title: "密碼不能為空!",icon: "none"});this.isRotate = true; this.disabled = true; let res;if (uni.getSystemInfoSync().platform == "android"){try {let data = await this.$http.post("/api/security/token", {username: this.account,password: this.password,});res = data.data;} catch (e) {this.isRotate = false;this.disabled = false;return;}let {data: res2} = await this.$http.get("/api/account/GetUserInfo",{custom: { auth: false },header: { token: res.token }});let userInfo = {account: this.account,password: this.password,token: res.token};for (let key in res2.data) {userInfo[key] = res2.data[key];}uni.setStorageSync("userInfo", userInfo); await this.getUpdate()this.isRotate = false;}if (uni.getSystemInfoSync().platform == "ios") {tunnel.post({url:`${this.$http.config.baseURL}/api/security/token?username=${this.account}&password=${this.password}`,},callBack=>{callBack = JSON.parse(callBack)console.log(callBack);//存儲tokenif(callBack.status != 0){uni.showToast({title: callBack.msg,icon: 'none'});this.isRotate = false;this.disabled = false;return}tunnel.get({url:`${this.$http.config.baseURL}/api/account/GetUserInfo`,token:callBack.token},callBack2=>{callBack2 = JSON.parse(callBack2)console.log(callBack2);let userInfo = {account: this.account,password: this.password,token: callBack.token};for (let key in callBack2.data) {userInfo[key] = callBack2.data[key];}console.log(userInfo);uni.setStorageSync("userInfo", userInfo); this.getUpdate()}) })}},},}; </script> 復制代碼

    編寫完成后,右鍵UNI項目: 發行-原生APP本地打包-生成本地打包APP資源

    把原生工程中app/src/main/assets/apps目錄下的__UNI__BCEC007這整個文件刪除,然后把你打包完成以新的APPID命名的文件粘貼到剛剛刪除干凈的apps目錄下這里以__UNI__BAC0197為例子。

    然后去app-src-main-assets-data-dcloud_control.xml中修改appid為你剛剛復制過來的那個appid

    4.2.4 在原生APP里進行插件測試

    寫完之后需要進行隧道初始化的測試 要在原生工程中實現這個Module的調用測試,需要進行下步驟:

    • 將原生插件在通過dcloud_uniplugins.json進行聲明和Module引入
    • 新建一個自定義的UNI項目,并編寫對應的調用方法

    所以我們第一步是先去原生工程中進行插件的聲明,按照官方文檔描述: 在UniPlugin-Hello-AS工程下app-src-main-assets/dcloud_uniplugins.json文件。 在moudles節點下 添加你要注冊的Module或?Component

    然后還要去app模塊的build.gradle去添加新增的Moudle插件

    apply plugin: 'com.android.application'android {compileSdkVersion 29buildToolsVersion '28.0.3'defaultConfig {applicationId "com.HBuilder.UniPlugin"minSdkVersion 21targetSdkVersion 21 //建議此屬性值設為21 io.dcloud.PandoraEntry 作為apk入口時 必須設置 targetSDKVersion>=21 沉浸式才生效versionCode 1versionName "1.0"multiDexEnabled truendk {abiFilters "armeabi-v7a", "x86" //this 貨}}buildTypes {release {zipAlignEnabled trueminifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {zipAlignEnabled trueminifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}//使用uniapp時,需復制下面代碼/*代碼開始*/aaptOptions {additionalParameters '--auto-add-overlay'//noCompress 'foo', 'bar'ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"}/*代碼結束*/ } repositories {flatDir {dirs 'libs'} } dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation fileTree(dir: 'libs', include: ['*.aar'])implementation "com.android.support:support-v4:28.0.0"implementation "com.android.support:appcompat-v7:28.0.0"/*uniapp所需庫-----------------------開始*/implementation 'com.android.support:recyclerview-v7:28.0.0'implementation 'com.facebook.fresco:fresco:1.13.0'implementation "com.facebook.fresco:animated-gif:1.13.0"/*uniapp所需庫-----------------------結束*/// 基座需要,必須添加implementation 'com.github.bumptech.glide:glide:4.9.0'implementation 'com.alibaba:fastjson:1.1.46.android'// 添加uni-app插件 // implementation project(':uniplugin_component') // implementation project(':uniplugin_module') // implementation project(':uniplugin_richalert')implementation project(':NBAModule') } 復制代碼

    配置完成后點擊run,然后點擊app首頁的圖標調用原生的方法

    以上可以看到能夠正常的進行調用。插件測試成功

    5 插件打包

    插件打包第一步還是很簡單的,點擊IDE右側的Gradle圖標,找到uniPlugin-Hello-AS/testModule/Tasks/NBATunnel/other/assembleRelease,雙擊assembleRelease

    在NBATunnel/build/outputs/arr文件夾找到我們的NBATunnel-release.arr?按照插件編寫命名規范生成uni-app插件的package.json

    具體代碼

    {"name": "原生插件","id": "NBATunnel","version": "1.0","description": "原生插件","_dp_type":"nativeplugin","_dp_nativeplugin":{"android": {"plugins": [{"type": "module","name": "NBATunnel","class": "com.example.NBAmodule.NBATunnel"}],"hooksClass": "","integrateType": "aar","dependencies": [],"compileOptions": { "sourceCompatibility": "1.8","targetCompatibility": "1.8"},"abis": ["armeabi-v7a","x86"],"minSdkVersion": "16","useAndroidX": false, "permissions": [],"parameters": {}}} } 復制代碼

    打包之前一定要記得去manifest.json選擇本地的原生插件,你會發現插件名就是之前package.json中的name字段。

    打包的時候選擇 運行-運行到手機或模擬器-制作自定義調試基座,等待打包完成點擊運行即可,如果沒有問題就可以打正式包了

    本文引自 稀土掘金網的扶不起的蝌蚪。

    總結

    以上是生活随笔為你收集整理的UNI APP---Android端原生插件开发实战(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    91亚洲网站 | 青青射| 中文av在线天堂 | 人人狠狠 | 黄污视频网站大全 | 在线成人免费电影 | 欧美天天综合 | 免费看的黄色片 | 911香蕉视频 | 国产一区二区高清 | 五月天婷婷在线播放 | av福利在线看 | 97超碰在 | 91完整版 | 亚洲精品乱码久久久久v最新版 | 国产91国语对白在线 | 免费进去里的视频 | 日韩av进入| 美女亚洲精品 | 国产精品中文字幕在线观看 | 九九影视理伦片 | 国产精品免费久久久久影院仙踪林 | 久草亚洲视频 | 欧美国产日韩一区二区 | 欧美日韩国产精品一区二区 | 亚洲欧美日韩在线一区二区 | 91夫妻自拍 | 久久精品一区二区三区中文字幕 | 日韩一区正在播放 | 婷婷激情站 | 国产精品二区三区 | 丝袜美腿在线 | 中文字幕在线视频一区二区 | 黄色日本免费 | 国产视频在线免费观看 | 天天草天天插 | 成人午夜剧场在线观看 | 中文在线 | 午夜精品一区二区三区四区 | 国产精品嫩草69影院 | 欧美性色黄大片在线观看 | 国产福利午夜 | 中文字幕电影在线 | 一级黄色av | 一本到视频在线观看 | 91系列在线 | 免费在线观看av的网站 | 看片网站黄色 | 国产精久久久久久妇女av | 国产视频久 | 欧美国产日韩一区 | 日韩黄色中文字幕 | 亚洲国产影院av久久久久 | 国产色婷婷在线 | 国产 在线观看 | 九九色网 | 99麻豆视频| 欧美性猛片 | 欧美性色综合网 | 日韩在线视频一区 | 欧美精品免费在线观看 | 日韩一区二区免费在线观看 | 色五月激情五月 | 久久99久久99精品免费看小说 | 亚洲伊人网在线观看 | 丁香色婷 | 午夜 免费 | 国产手机av | 91黄在线看 | 激情综合久久 | 免费在线国产视频 | 国产明星视频三级a三级点| 99久久精品久久久久久动态片 | 91人人插| 中国一级片在线播放 | 日韩三级视频在线观看 | 国产中的精品av小宝探花 | 黄色成人毛片 | 日本精品一区二区 | 夜夜爽88888免费视频4848 | 久久久久久久久久久高潮一区二区 | 在线va网站| 在线观看视频国产一区 | 久久伊人精品天天 | 免费在线黄色av | 国内视频 | 狠狠色狠狠色 | 日韩成人邪恶影片 | 91网免费观看| 日本在线观看中文字幕无线观看 | 亚洲伊人婷婷 | 成人av直播 | 伊人成人久久 | 成人资源站 | 国产精品 日韩 | 日韩黄色一级电影 | 久久精品99久久久久久 | 国产精品久久久久久久婷婷 | 亚洲黄色在线观看 | 国产精品一区二区精品视频免费看 | 色天堂在线视频 | 碰超人人| 久久久受www免费人成 | 在线播放亚洲激情 | 国产精品视频资源 | 久草视频在线新免费 | 人人添人人澡人人澡人人人爽 | 日韩h在线观看 | 天天干天天操天天爱 | 亚洲a色 | 久久美女免费视频 | 一区二区三区观看 | 91精品国产九九九久久久亚洲 | 久久精品免费 | 日本性视频 | 久久影院精品 | 久久久精品视频网站 | 久久不色 | 久久视频免费在线观看 | 97香蕉久久超级碰碰高清版 | 五月婷婷色丁香 | av亚洲产国偷v产偷v自拍小说 | 欧美性色综合网站 | 成年人在线看视频 | 天天操天天是 | 免费看久久久 | 91探花国产综合在线精品 | 91九色九色| 久久九九久久精品 | 91九色精品国产 | 亚洲精品乱码久久久久久高潮 | 欧美日韩二区三区 | 亚洲www天堂com | 日韩精品视 | 欧美日韩国产色综合一二三四 | 精品久久网 | 国产一级一片免费播放放 | 久久精品国产亚洲精品2020 | 97电影在线看视频 | 欧美一级免费 | 黄色三级在线看 | 日韩高清不卡一区二区三区 | 日韩色高清 | 特级xxxxx欧美 | 亚洲黄色免费观看 | 91福利影院在线观看 | 九九视频这里只有精品 | 日韩超碰 | 精品国产网址 | 精品美女久久久久 | 免费在线观看av网址 | 亚洲成av人片一区二区梦乃 | 亚洲婷婷在线 | 亚洲人成免费网站 | 91传媒激情理伦片 | 毛片网站在线看 | 欧美91精品国产自产 | 国产在线观看你懂得 | aaa日本高清在线播放免费观看 | 天天躁日日躁狠狠躁 | 中文字幕在线看视频 | 日本在线观看视频一区 | 美国三级黄色大片 | 国产午夜在线 | 中文字幕在线久一本久 | 91中文字幕在线视频 | 久草综合视频 | 国内精品久久久久久久影视简单 | 日韩欧美一区二区在线播放 | 久久人人干 | 日本久久久久久久久久久 | 欧美一二区视频 | 天天天天天天天操 | av中文字幕不卡 | 狠狠干美女 | 午夜a区 | 精品久久一区二区三区 | 亚洲最新在线视频 | 00av视频 | 亚洲激情在线播放 | 日韩精品不卡在线观看 | 涩涩在线| 欧美精品在线一区二区 | 最近高清中文在线字幕在线观看 | 69精品在线| 日韩大片免费观看 | 欧美男同网站 | 特级西西www44高清大胆图片 | 久久少妇免费视频 | 国产国产人免费人成免费视频 | 欧美成人一二区 | 日韩欧美电影网 | 色婷婷成人网 | 午夜视频在线网站 | 亚洲最大成人免费网站 | 久草网视频 | 欧美日韩国产一二 | 国产大尺度视频 | 婷婷九月丁香 | 亚洲成人午夜在线 | 丁香婷婷基地 | 国产精品a久久久久 | av成人亚洲| 91一区二区在线 | 久久无码av一区二区三区电影网 | 日韩有码网站 | 天天伊人网 | 毛片永久新网址首页 | 国产亚洲精品成人av久久影院 | 午夜免费久久看 | 97精品在线 | 国产精品黄色影片导航在线观看 | 人人插人人看 | 欧美国产高清 | 国产高清小视频 | 狠狠操精品 | 国产中文欧美日韩在线 | 天天插天天爽 | 五月婷婷在线视频观看 | 国产成人免费精品 | 亚洲美女视频在线观看 | 久久99精品久久久久久 | 日韩a在线观看 | 欧美一级片在线播放 | 伊人网av | 国产视频1 | 久久黄色影院 | 亚洲精品午夜视频 | 国产亚洲91 | 亚洲高清在线观看视频 | 天天色影院 | 色婷婷狠| 激情欧美一区二区三区免费看 | 国产精品99久久久久久宅男 | 久久黄色a级片 | 中文字幕一区二区三区久久蜜桃 | 亚洲欧美日韩精品一区二区 | 国内精品久久天天躁人人爽 | 五月的婷婷 | 国产成人免费 | 99成人免费视频 | 久久精品爱爱视频 | 啪一啪在线 | 在线视频 一区二区 | 色婷婷国产精品 | 97国产大学生情侣酒店的特点 | 99欧美| 久热国产视频 | 日日综合 | 91丨九色丨蝌蚪丰满 | 探花视频在线版播放免费观看 | 天天色天天上天天操 | 97偷拍视频| 欧美一级片在线观看视频 | 国产精品免费看 | 日韩精品一区二区免费视频 | 久久久免费网站 | 很黄很污的视频网站 | 久久激情精品 | 69久久久| 色国产精品| 精品一区精品二区 | 操天天操 | 日韩av进入 | 五月天综合色激情 | 亚洲三级黄色 | 91av在线视频播放 | 综合中文字幕 | 欧美在线日韩在线 | 人人爱人人做人人爽 | 日本久久影视 | 午夜视频在线观看欧美 | 久久久精品影视 | 久久夜夜夜 | 国产一级久久 | 国内精品福利视频 | 天天射天天爱天天干 | 欧美日韩高清一区二区三区 | 91精品成人| 精品中文字幕在线观看 | 欧美精品午夜 | 日日摸日日添夜夜爽97 | 久久久网站 | 99久久精品国产网站 | 国产精品粉嫩 | 国产亚洲精品久久久久秋 | 国产成人久久精品一区二区三区 | 伊人超碰在线 | 久久九九免费视频 | 99精品视频在线观看免费 | 91麻豆高清视频 | 中文字幕永久免费 | 国产aa精品 | 一本之道乱码区 | 狠狠狠色丁香婷婷综合激情 | 在线观看国产福利片 | 国产一区福利 | 色综合国产 | 久久综合婷婷国产二区高清 | 国产精品白虎 | 欧美日韩性视频 | 亚洲午夜久久久久 | 久久久免费看视频 | 在线免费黄色 | 中文字幕乱码电影 | 韩日在线一区 | 天天躁天天躁天天躁婷 | 亚洲天堂自拍视频 | 久久艹国产 | 午夜精品久久久久久久久久久 | 中文字幕在线观看三区 | 日韩一区二区三免费高清在线观看 | 日韩精品久久久久久久电影竹菊 | 国产视频在线观看一区 | 97在线视| 日韩字幕 | 91亚洲精品久久久久图片蜜桃 | 免费在线观看亚洲视频 | 久久久久免费精品国产 | 日韩欧美一区二区三区视频 | 久久99国产精品久久99 | www.黄色小说.com | 国产成人99久久亚洲综合精品 | 国产成人av电影在线 | 激情开心网站 | 亚洲综合色视频 | 亚洲午夜精品在线观看 | 丁香花在线观看免费完整版视频 | 精品福利在线观看 | 狠狠操夜夜操 | 久久久五月天 | 精品视频成人 | 麻豆国产电影 | 美女视频黄网站 | 国产69精品久久久久99尤 | www.色就是色 | 欧美性色综合网 | 色夜影院 | 亚洲欧洲精品一区二区精品久久久 | 在线 视频 一区二区 | 免费情趣视频 | 中文字幕在线第一页 | 国产一二三区在线观看 | 色 中文字幕 | 精品在线视频播放 | 麻豆视频一区 | 精品在线免费观看 | 亚洲片在线资源 | 天天操天天插 | 97超碰在线久草超碰在线观看 | 日韩免费一区二区 | 福利视频一区二区 | 色综久久 | 免费在线播放 | 免费观看丰满少妇做爰 | 91视频免费播放 | 欧美在线a视频 | 国产精品欧美 | 精品人人人 | 美女视频黄频大全免费 | 在线免费看黄网站 | 日韩视频一区二区在线 | 亚洲人在线视频 | 亚洲视频在线观看 | 精品久久久久久久久中文字幕 | 成人av av在线 | 中文字幕视频一区 | av福利免费 | 亚洲精品成人免费 | 四虎成人精品永久免费av九九 | 中文字幕在线播放一区二区 | 国产剧情av在线播放 | 日韩在线观看中文字幕 | 日韩成年视频 | 亚洲精品一区二区精华 | 婷婷在线精品视频 | 国产不卡精品视频 | 日本一区二区免费在线观看 | 一级理论片在线观看 | 欧美国产日韩一区二区三区 | 国内精品视频在线 | 久久久久激情电影 | 国产日产精品久久久久快鸭 | 久久影视网| 国产在线综合视频 | 久久久免费高清视频 | 91精品爽啪蜜夜国产在线播放 | 精品美女久久久久 | 亚洲日本国产精品 | 狠狠狠色丁香婷婷综合久久五月 | 日韩电影一区二区在线 | 久久福利国产 | 成人在线观看日韩 | 99精品视频免费看 | 视频在线亚洲 | 国产亚洲激情视频在线 | 国产专区一 | 欧美激情精品久久久久 | 国内精品久久久久久久久久久 | 中文国产在线观看 | 天天色棕合合合合合合 | 香蕉影视app | 91麻豆看国产在线紧急地址 | 麻豆高清免费国产一区 | 二区三区中文字幕 | 日日夜夜亚洲 | 国产色视频123区 | 天天操,夜夜操 | 国产手机视频在线播放 | 日韩精品免费专区 | 午夜在线观看影院 | av大全在线免费观看 | 国产男女免费完整视频 | 日韩精品国产一区 | 国产精品亚洲片夜色在线 | 久久少妇av | 毛片网站免费 | 国产精品自产拍在线观看网站 | 久久成人资源 | 久久久综合电影 | 久久精品视频2 | 日韩影视大全 | 免费日韩一区二区三区 | 国产污视频在线观看 | 天堂入口网站 | 91久久在线观看 | 精品自拍网 | 国产精品久久久久久久久费观看 | 99久久99视频 | 日本黄网站| 免费看片在线观看 | 在线免费观看国产 | 欧美精品在线视频 | 激情欧美一区二区免费视频 | 美女视频黄色免费 | 国产精品99久久久久久大便 | 日躁夜躁狠狠躁2001 | 日韩视 | 开心色激情网 | 国产精品久久毛片 | 国产特级毛片aaaaaa毛片 | 日日干美女 | 亚洲精品视频网站在线观看 | 丁香六月伊人 | 亚洲免费国产 | 色就是色综合 | 成人av教育 | 国模一区二区三区四区 | 亚洲一区免费在线 | 久久九九免费视频 | 黄色大片日本免费大片 | 欧美aaaxxxx做受视频 | www免费看片com | 中文在线| 天天色综合三 | 色综合天天爱 | av在线专区 | 婷婷中文在线 | 久久成人免费电影 | 日韩伦理片hd | 亚洲精品视频观看 | 精品国产福利在线 | 日韩视频二区 | 欧美精品三级在线观看 | 日本久久免费电影 | 狠狠黄 | 国产精品 美女 | 日韩免费网站 | av黄色大片 | 久久免费激情视频 | 国产亚洲欧洲 | 一区二区三区免费在线观看视频 | 欧美日韩精品在线视频 | 一级a性色生活片久久毛片波多野 | 成人久久毛片 | 国产视频不卡 | 美女视频网站久久 | 麻豆视频免费观看 | 久久综合欧美精品亚洲一区 | 五月婷婷激情 | 一区在线观看 | 成年人在线免费看视频 | 精品一二三四五区 | 久草视频中文在线 | 免费视频一二三区 | 男女精品久久 | 99精品视频一区二区 | 在线观看激情av | 亚洲综合导航 | 亚洲精品一区二区久 | 亚洲精品国偷拍自产在线观看 | 青青草国产免费 | 伊人天天操 | 国产又粗又猛又色 | 天天天干夜夜夜操 | 中文字幕第一 | 欧美日韩在线视频一区二区 | 最新日韩电影 | 97品白浆高清久久久久久 | 99视频在线观看一区三区 | 91伊人| 69国产精品视频免费观看 | 玖玖色在线观看 | 成人va视频 | 99久久久国产精品 | 69人人| 国产一区成人在线 | 亚洲精品国产免费 | 日韩午夜电影院 | av电影免费在线播放 | 999精品| av综合av | 久久精品免费观看 | 日韩av免费观看网站 | 亚洲四虎影院 | 色视频国产直接看 | 国产91粉嫩白浆在线观看 | 久久草草热国产精品直播 | 亚洲成人欧美 | 欧美成人xxx | 狠狠狠狠狠狠天天爱 | 黄色1级毛片 | 亚洲精品88欧美一区二区 | 久久99免费观看 | 国产精品视频在线看 | 在线观看韩国av | 二区三区视频 | 91亚洲国产 | 国产精品久久久久永久免费 | 在线观看成人小视频 | 久久96国产精品久久99漫画 | 91在线视频观看免费 | 日韩精品网址 | 日本一区二区三区免费观看 | 久久久一本精品99久久精品 | 一区二区三区中文字幕在线 | 婷婷成人综合 | 永久免费的啪啪网站免费观看浪潮 | 久久久久久久久久久电影 | 99久久er热在这里只有精品66 | 九九热视频在线 | 久久精品成人热国产成 | 久久伦理电影 | 婷婷中文字幕 | 黄色在线观看www | 国产精品video | 天天干,天天干 | 一级成人网 | 91精品一区二区在线观看 | 成人久久视频 | 国产在线观看你懂的 | 免费看的黄网站软件 | 毛片美女网站 | 亚洲电影久久 | 中文字幕91在线 | 成人一级视频在线观看 | 久久色视频| 91九色国产视频 | 国产91在线看| 国产一区在线不卡 | 在线视频久久 | 日韩午夜三级 | 91麻豆精品国产 | 开心色停停| 西西www4444大胆视频 | 国内精品视频一区二区三区八戒 | 国色综合| 国产一线在线 | 国产成人精品网站 | 五月婷婷在线综合 | 午夜影院一级片 | 99久久一区 | 91免费观看视频网站 | 国产精品av久久久久久无 | 免费在线看v | 嫩小bbbb摸bbb摸bbb | 在线观看中文字幕网站 | 91精品国产乱码久久桃 | 人人看人人草 | 狠狠操精品 | 久久国产一区二区三区 | 亚洲黄色一级视频 | 日韩精品免费专区 | 亚洲小视频在线观看 | 成人动漫精品一区二区 | 国产一区二区午夜 | 99精品在线视频播放 | 97超碰免费 | 少妇高潮流白浆在线观看 | 人人舔人人爽 | 国产视频一区精品 | 81国产精品久久久久久久久久 | 国产一区二区影院 | 国产中文视频 | 人人看黄色| 五月婷婷激情六月 | 国产手机视频在线 | 日韩一区二区三区不卡 | 有码一区二区三区 | 国产激情久久久 | 成全在线视频免费观看 | 国产精品v欧美精品v日韩 | 天天干,狠狠干 | 1000部国产精品成人观看 | 在线91观看 | 国产色妞影院wwwxxx | 天天躁日日躁狠狠躁av麻豆 | 精品久久免费看 | 国产视频在线观看一区 | 黄色小说免费观看 | 亚洲全部视频 | 婷久久| 美女黄频在线观看 | 在线免费av播放 | av电影亚洲| 国色天香第二季 | 日本丶国产丶欧美色综合 | 在线亚洲成人 | 涩av在线| 中文字幕在线观看免费高清完整版 | 日韩精品免费一区 | 最近中文字幕完整视频高清1 | 日韩午夜电影网 | 日韩在线中文字幕 | 色噜噜在线观看 | 精品国产日本 | av一级黄| 国产精品永久免费视频 | 天天射天天干天天 | 国产999精品久久久影片官网 | 亚洲欧美日韩国产精品一区午夜 | 久久久国产一区二区三区四区小说 | 五月婷婷视频在线 | 天天色天天操天天爽 | 狠狠躁日日躁狂躁夜夜躁 | 91精品国产自产在线观看永久 | 韩日精品中文字幕 | 久久影视一区二区 | 欧美性做爰猛烈叫床潮 | 欧美肥妇free| 国产精品激情 | 香蕉色综合 | 日韩av成人 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 免费a网站 | 欧美国产亚洲精品久久久8v | 亚洲精品视频免费在线观看 | 国产剧情在线一区 | av在线网站观看 | 免费黄色在线 | 日韩精品一区二区在线视频 | 亚洲精品国产精品国自 | 国产综合激情 | 色婷婷精品大在线视频 | 欧美日韩性 | 国产99久久久精品 | 96精品视频| 黄网在线免费观看 | 免费亚洲一区二区 | 亚洲日本中文字幕在线观看 | 国产 一区二区三区 在线 | 免费观看性生活大片3 | 日韩在线观看高清 | 99riav1国产精品视频 | 狠狠色丁香婷综合久久 | 国产免费亚洲高清 | 日日干干 | 国产综合婷婷 | 国产不卡精品 | 日韩在线高清免费视频 | 狠狠色丁香久久婷婷综合丁香 | 成人av免费 | 久久综合色婷婷 | 国产亚洲成人网 | 国产精品99久久久久久久久久久久 | 久操久 | 色是在线视频 | 婷婷丁香六月天 | 日韩国产欧美在线视频 | 黄色毛片在线观看 | 91精品对白一区国产伦 | www91在线观看 | 狠狠色香婷婷久久亚洲精品 | 天天干,天天操,天天射 | 五月天狠狠操 | 97人人模人人爽人人少妇 | 免费看国产精品 | 亚洲三级精品 | 成人国产精品久久久久久亚洲 | 超碰夜夜| 中文字幕在线观看视频一区 | 中文字幕色播 | 日韩午夜电影网 | 婷婷中文在线 | 亚洲欧美在线观看视频 | 99久久999久久久精玫瑰 | 亚洲欧洲一级 | 国产视频欧美视频 | 欧美91视频| 中文字幕在线人 | 日韩欧美一区二区三区视频 | 免费午夜网站 | 成人国产精品久久久 | 欧美老人xxxx18| 国产伦精品一区二区三区四区视频 | www视频在线免费观看 | 黄色片毛片 | 激情五月婷婷综合网 | 亚洲成色777777在线观看影院 | 99热国产在线中文 | 国产在线精品福利 | 欧美精品xx | 天天色播 | 国产又粗又猛又色 | 人人干人人草 | 免费看黄在线 | 国产精品成人免费一区久久羞羞 | av免费电影在线 | 日本性生活免费看 | 国产一区二区视频在线 | 狠狠激情中文字幕 | 国产视频1| 久草91视频 | 久久女教师 | 97狠狠干 | 超碰在线天天 | 美女在线免费视频 | 一区二区视频电影在线观看 | 性日韩欧美在线视频 | 精品久久一区二区三区 | 久久久穴| 国产91精品在线播放 | 能在线看的av | 欧美精品在线观看免费 | 国产成人精品在线 | 日韩亚洲在线视频 | 国产乱对白刺激视频不卡 | 久久久久一区二区三区四区 | 精品久久久久久久久中文字幕 | 国产三级午夜理伦三级 | 伊人久久五月天 | 免费视频成人 | 在线观看视频精品 | 久久情爱| 婷婷丁香九月 | 日韩久久久久久久久 | 99久久夜色精品国产亚洲 | 欧美日韩国产三级 | 国产福利一区二区三区在线观看 | 99久久久久国产精品免费 | 久久久久免费精品视频 | 久久综合99 | 精品国产乱码久久久久久浪潮 | 国产999精品| 一区二区电影网 | 欧美日韩国产一区二 | 国产精品大片免费观看 | 亚洲综合色播 | 日韩视频一区二区在线 | 亚洲区视频在线观看 | 国产成人精品久久二区二区 | 亚洲精品mv在线观看 | 涩av在线 | 白丝av免费观看 | 91高清视频 | 欧美日韩高清不卡 | 国产一级电影 | 深夜免费福利网站 | 91人网站 | 日韩乱码中文字幕 | 香蕉视频最新网址 | 久久久久久久久久久福利 | 精品99在线视频 | 99热最新地址 | 国产特级毛片aaaaaa | 99精品免费久久久久久久久 | 黄色精品视频 | 久久成视频 | 免费福利小视频 | 九九久久电影 | 五月综合色 | 国产精彩在线视频 | 精品久久久久久亚洲 | 欧美一区二区免费在线观看 | 日韩免费av在线 | 免费av大全 | 99精品在线免费视频 | 狠狠色狠狠色综合日日92 | 天天舔天天搞 | 99久久婷婷国产 | 久久免费黄色网址 | 日韩毛片精品 | www.久久精品视频 | 麻花豆传媒mv在线观看 | 黄色激情网址 | 亚州国产视频 | av在线看网站 | 午夜电影久久久 | 中文视频一区二区 | 婷婷五月在线视频 | aaa日本高清在线播放免费观看 | 97视频播放 | 久久久一本精品99久久精品66 | 91最新在线视频 | 久久综合免费视频 | 精品国产99 | 国产资源站 | 色永久免费视频 | 日韩理论片在线观看 | 日韩av一区二区在线播放 | 欧美一区二区三区不卡 | 国产剧情在线一区 | 又污又黄的网站 | 国产一区二区三区 在线 | 国产高清视频免费观看 | av性在线| 激情视频网页 | 日日骑| 国产精品二区在线观看 | 天天射天天色天天干 | 人人澡超碰碰97碰碰碰软件 | 香蕉看片| 伊人五月在线 | 日韩r级在线| 日日操网站 | 色五月色开心色婷婷色丁香 | 成人免费毛片aaaaaa片 | 日韩mv欧美mv国产精品 | av在线色 | 中文 一区二区 | 免费看一级特黄a大片 | 国产短视频在线播放 | 国产成人在线免费观看 | 久久久久国产精品一区二区 | 久久久人人爽 | 色丁香色婷婷 | 久草综合视频 | 亚洲精品国产精品国自产在线 | 亚洲黄色三级 | 亚洲综合色婷婷 | 91激情视频在线观看 | 日韩欧美视频一区二区三区 | 精品欧美一区二区三区久久久 | 免费亚洲婷婷 | 91传媒91久久久| 色福利网| 色天天中文 | 国产成人精品一区二区三区在线观看 | 久久影视一区 | 成年人网站免费在线观看 | 久草在线一免费新视频 | 激情av综合| 欧洲亚洲激情 | 激情五月婷婷激情 | 不卡的av电影在线观看 | 天天色天天射天天操 | 亚洲欧洲国产精品 | 久久久久久久免费看 | 精品一区二区综合 | 国产福利91精品 | 久久精品在线免费观看 | 人人干天天射 | 免费人做人爱www的视 | 欧美一级黄大片 | 欧美日韩国产综合一区二区 | 六月丁香激情综合色啪小说 | 午夜精品久久久久久久久久 | 久久免费99 | 久久99在线视频 | 日日干夜夜骑 | www免费看 | 婷婷激情综合网 | 成人国产精品一区 | 日本精品久久久一区二区三区 | 天天艹天天操 | 999在线视频 | 免费麻豆 | 91精品区 | 日韩中文字幕免费视频 | 日日爽夜夜操 | 国产欧美精品一区二区三区四区 | 国产精品18久久久久久久 | 成年人在线播放视频 | 亚洲欧美日韩国产精品一区午夜 | 国产色一区 | 一级黄色a视频 | 99久久久久久久久久 | 久久久久久久久久久成人 | 欧美精品乱码99久久影院 | 激情偷乱人伦小说视频在线观看 | 成人久久免费 | 国产成人一区二区三区在线观看 | 99亚洲精品 | 精品国产色 | 色插综合| 欧美日韩一区二区三区在线免费观看 | 天天操天天操天天操 | 亚洲一区 影院 | 精品96久久久久久中文字幕无 | 91视频午夜 | 欧美精品国产综合久久 | 韩国精品在线观看 | www99久久 | www.香蕉视频| 黄色片网站大全 | 99视频在线观看免费 | 深爱激情站| 欧美综合色 | 精品久久久久亚洲 | 六月天综合网 | 久久99精品久久久久蜜臀 | 成人av片免费观看app下载 | 成人av资源网 | 久久网站av | 精品999| 日韩高清激情 | 亚洲国产精品资源 | 国产一级在线免费观看 | 九九日韩 | 国产精品一区二区麻豆 | 国产啊v在线观看 | 国产精品久久久久久久免费 | 91久久爱热色涩涩 | 天天色天天操综合 | 99一级片 | 三级av在线免费观看 | 五月天激情在线 | 欧洲亚洲激情 | 免费av在线 | 精品免费一区二区三区 | 成人欧美一区二区三区黑人麻豆 | av丝袜制服 | 色婷婷综合久久久中文字幕 | 成人影片免费 | 免费人成在线观看网站 | 国产福利在线免费观看 | bbbbb女女女女女bbbbb国产 | 鲁一鲁影院 | 天天色天天操天天爽 | 欧美日本高清视频 | 亚洲精品理论 | 九九在线免费视频 | 免费日韩一区二区三区 | 国产精品久久久久久久久婷婷 | 日韩三级一区 | 在线观看蜜桃视频 | 国产精品短视频 | 美女福利视频一区二区 | 五月婷婷六月丁香激情 | 久久久国产一区二区 | 中文字幕日韩免费视频 | 在线播放国产精品 | 精品毛片一区二区免费看 | 久久精品一区二区国产 | 黄网站色视频 | 国产91精品久久久久 | 亚洲少妇自拍 | 欧美韩日视频 | 97超在线| 天堂黄色片 | 9i看片成人免费看片 | 久久国色夜色精品国产 | 成人黄色片免费看 | 99久久精品国产一区二区三区 | 在线电影中文字幕 | 亚洲午夜激情网 | 久草在线免费看视频 | 免费黄色在线网站 | 亚洲视频 在线观看 | 欧美日韩三区二区 | 欧美精品在线观看免费 | 91亚洲激情| 国产精品综合久久久久久 | 国产精品自拍在线 | 久久神马影院 | 中国一级片在线观看 | 伊人狠狠色丁香婷婷综合 | 国产男女爽爽爽免费视频 | 久久国产精品成人免费浪潮 | 在线a人v观看视频 | 国产午夜在线观看视频 | 天天综合网天天综合色 | 五月婷婷中文网 | 久久久黄视频 | 久久综合久久综合久久综合 | 成人h在线 | 欧美激情精品久久久久久免费印度 | 成人黄色在线播放 | 午夜av影院 | 国产在线精品二区 | 丝袜网站在线观看 | 操操操com | 国产激情小视频在线观看 | www.午夜色.com | 国产97在线看 | 中文字幕日韩有码 | 中文免费 | 18国产精品白浆在线观看免费 |