第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

構建可在桌面和移動設備的任何地方運行的服務器

構建可在桌面和移動設備的任何地方運行的服務器

Go
萬千封印 2022-09-26 15:07:29
我有以下簡單的服務器,在我的筆記本電腦上運行(Mac / Windows / Linux):package mainimport (    "fmt"    "log"    "net/http")func handler(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hi there %s!", r.URL.Path[1:])}func main() {    http.HandleFunc("/", handler)    log.Println(http.ListenAndServe("localhost:6060", nil))}enter image description here我是否可以使用相同的代碼庫在移動設備上運行我的應用程序,而無需使用gomobile或其他軟件包,以便將我的代碼作為通用應用程序?webview
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

答案是“是”,但需要對文件本身進行一些輕微的修改。

  1. 從 中刪除所有內容,因為我們會將最終結果構建為共享庫,而不是可執(zhí)行二進制文件。func main() {}

  2. 在函數(shù)中運行服務器。//export

  3. 從 as 運行服務器,以便它不會阻塞移動應用程序的主線程。anonymous goroutinego func() {}()

  4. 為了保持服務器戈魯丁的運行,我們需要使用一個通道來防止戈魯廷退出。<-c

  5. 通過添加 來使用,因此主文件將如下所示:cgoimport "C"

package main


import "C"


// other imports should be seperated from the special Cgo import

import (

    "fmt"

    "log"

    "net/http"

)


//export server

func server() {

    c := make(chan bool)

    go func() {

        log.Println(http.ListenAndServe("localhost:6060", nil))

        <-c

    }()


    http.HandleFunc("/", handler)


}


func handler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "Hi there %s!", r.URL.Path[1:])

}


func main() {}

確保安裝了安卓系統(tǒng),并且您知道它的浴缸NDK

生成輸出名稱為 的輸出,以生成以供使用:c-sharedlibxxxAndroid

    CGO_ENABLED=1 \

    GOOS=android \

    GOARCH=arm \

    GOARM=7 \

    CC=$(NDK_BIN)/armv7a-linux-androideabi21-clang \

    go build -buildmode=c-shared -o libfoo.so http.go

等由于Android具有多個架構,我們需要單獨編譯每個架構,因此我們可以在創(chuàng)建Android應用程序后,通過從項目模板中進行選擇,在輸出庫名稱下方,所有過程都可以自動執(zhí)行,并且每個文件夾中將生成2個文件,并且:MakefileNative C++libfoolibfoo.solibfoo.h


enter image description here


#Filename: Makefile

# To compile run:

# make android


IOS_OUT=lib/ios

ANDROID_OUT=../android_app/app/src/main/jniLibs

ANDROID_SDK=$(HOME)/Library/Android/sdk

NDK_BIN=$(ANDROID_SDK)/ndk/23.0.7599858/toolchains/llvm/prebuilt/darwin-x86_64/bin


android-armv7a:

    CGO_ENABLED=1 \

    GOOS=android \

    GOARCH=arm \

    GOARM=7 \

    CC=$(NDK_BIN)/armv7a-linux-androideabi21-clang \

    go build -buildmode=c-shared -o $(ANDROID_OUT)/armeabi-v7a/libfoo.so ./cmd/libfoo


android-arm64:

    CGO_ENABLED=1 \

    GOOS=android \

    GOARCH=arm64 \

    CC=$(NDK_BIN)/aarch64-linux-android21-clang \

    go build -buildmode=c-shared -o $(ANDROID_OUT)/arm64-v8a/libfoo.so ./cmd/libfoo


android-x86:

    CGO_ENABLED=1 \

    GOOS=android \

    GOARCH=386 \

    CC=$(NDK_BIN)/i686-linux-android21-clang \

    go build -buildmode=c-shared -o $(ANDROID_OUT)/x86/libfoo.so ./cmd/libfoo


android-x86_64:

    CGO_ENABLED=1 \

    GOOS=android \

    GOARCH=amd64 \

    CC=$(NDK_BIN)/x86_64-linux-android21-clang \

    go build -buildmode=c-shared -o $(ANDROID_OUT)/x86_64/libfoo.so ./cmd/libfoo


android: android-armv7a android-arm64 android-x86 android-x86_64

轉到并執(zhí)行以下操作:8.1。文件 ,將其設置為:android_app/app/src/main/cppCMakeLists.txt

cmake_minimum_required(VERSION 3.10.2)


project("android")


add_library( # Sets the name of the library.

             native-lib


             # Sets the library as a shared library.

             SHARED


             # Provides a relative path to your source file(s).

             native-lib.cpp )


add_library(lib_foo SHARED IMPORTED)

set_property(TARGET lib_foo PROPERTY IMPORTED_NO_SONAME 1)

set_target_properties(lib_foo PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}/libfoo.so)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}/)


find_library( # Sets the name of the path variable.

              log-lib


              # Specifies the name of the NDK library that

              # you want CMake to locate.

              log )


target_link_libraries( # Specifies the target library.

                       native-lib

                       lib_foo


                       # Links the target library to the log library

                       # included in the NDK.

                       ${log-lib} )

8.2. 文件設置為:native-lib.cpp


#include <jni.h>

#include <string>


#include "libfoo.h" // our library header


extern "C" {

    void

    Java_tk_android_MainActivity_serverJNI() {

        // Running the server

        server();

    }

}

將網(wǎng)頁視圖添加到 中,如下所示:layout/activity_main

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity">


    <WebView

        android:id="@+id/wv"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:isScrollContainer="false"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintLeft_toLeftOf="parent"

        app:layout_constraintRight_toRightOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

更新如下:MainActivity

package tk.android


import android.os.Bundle

import android.webkit.WebView

import android.webkit.WebViewClient

import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)


        var wv = findViewById<WebView>(R.id.web_view)

        serverJNI()

        wv.loadUrl("http://127.0.0.1:6060/")

        wv.webViewClient = object : WebViewClient() {

            override fun shouldOverrideUrlLoading(viewx: WebView, urlx: String): Boolean {

                viewx.loadUrl(urlx)

                return false

            }

        }

    }


    private external fun serverJNI(): Void


    companion object {

        // Used to load the 'native-lib' library on application startup.

        init {

            System.loadLibrary("native-lib")

        }

    }

}

更新為:AndroidManifest

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="tk.android">


    <!-- Mandatory:

                android:usesCleartextTraffic="true"

         Optional: 

                android:hardwareAccelerated="true" 

         Depending on the action bar required:

                android:theme="@style/Theme.AppCompat.NoActionBar"

    -->

    <application

        android:hardwareAccelerated="true"     // <- Optional 

        android:usesCleartextTraffic="true"     // <- A must to be added

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/ic_launcher_round"

        android:supportsRtl="true"

        android:theme="@style/Theme.AppCompat.NoActionBar">   // <- If do not want action bar

        <activity android:name=".MainActivity"

            android:configChanges="orientation|screenSize">   // <- A must to avoid crashing at rotation

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>


</manifest>

enter image description hereenter image description here

獎金使用 Go,所有靜態(tài)文件都可以嵌入到同一庫中,包括 、,因此您可以使用 GUI 構建 API 或完整的應用程序embedcssjavascripttemplates

enter image description here


查看完整回答
反對 回復 2022-09-26
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號