當前位置:首頁 » 安卓系統 » 文件樹android

文件樹android

發布時間: 2023-03-13 08:26:05

A. 如何Golang開發Android應用

環境配置好復雜,我不得不嘮叨幾句。
需要下載golang1.4rc版,下載ndk,然後編譯。 然後用go get 下載gobind這個工具, 然後,將寫好的代碼用gobind轉化下,然後使用特殊的編譯命令,將代碼編譯成.so文件,將生成的相關文件,放到android studio的項目中。然後java代碼中,利用jni調用引用的代碼。
... 好,接著往下看吧。
環境准備
一台Linux 64的機器
一個帶有AndroidStudioIDE的開發機器
因為環境配置實在復雜,所以我們引入的docker。
docker pull codeskyblue/docker-goandroid
docker run --rm -ti codeskyblue/docker-goandroid bash

cd example; echo "view example projects

docker起來之後,什麼就都配置好了,NDK啦,java啦,GO的環境變數了,等等,並且還預裝了vim,gradle,tmux,git,syncthing,svn
開始寫代碼
寫代碼之前,先約定下目錄結構
go的代碼都放在src/golib下,編譯使用make.bash編譯腳本,看下這個文件樹
.
|-- app.iml
|-- build.gradle
|-- libs/armeabi-v7a # go編譯生成的so文件
| `-- libgojni.so
|-- main.go_tmpl # 一個模板文件,先不用管它
|-- make.bash # 編譯腳本,用來生成.so和Java代碼
`-- src
|-- golib
| |-- hi
| | |-- go_hi�0�2�0�2�0�2 # 自動生成的代碼
| | | `-- go_hi.go
| | `-- hi.go # 需要編寫的代碼
| `-- main.go
`-- main
|-- AndroidManifest.xml
|-- java
| |-- go # 自動生成的代碼
| | |-- Go.java
| | |-- Seq.java
| | `-- hi
| | `-- Hi.java
| `-- me/shengxiang/gohello # 主要的邏輯代碼
| `-- MainActivity.java
`-- res

我已經寫了一個例子,先直接搞下來

編譯下,試試行不行(就算不行問題應該也不大,因為大問題都被我消滅了)
cd GoHello/app
./make.bash
../gradlew build

一切順利的話在build/outputs/apk下應該可以看到app-debug.apk這個文件。(劇透下,這個文件只有800多K)
編譯好的我放到qiniu上了,可以點擊下載看看
下面可以嘗試改改,我拋磚引玉說下
打開hi.go這個文件
hi.go的內容,比較簡單,我們寫Go代碼主要就是這部分
// Package hi provides a function for saying hello.
package hi

import "fmt"

func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
return "(Go)World"
}

文件末尾添加下面這行代碼
func Welcome(name string) string {
return fmt.Sprintf("Welcome %s to the go world", name)
}

使用./make.bash重新編譯下
打開MainActivity.java 修改下OnClickListener事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = Hi.Welcome("yourname");
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});

編譯運行下,把生成的apk安裝到手機上試試。
原理解讀(有興趣的接著看)
首先說下gobind這個工具。
go_hi/go_hi.go這個文件時通過gobind這個工具生成的,用來配合一個簡單的程序,生成.so文件
// go_hi.go
package go_hi

import (
"golang.org/x/mobile/bind/seq"
"example/hi"
)

func proxy_Hello(out, in *seq.Buffer) {
param_name := in.ReadUTF16()
hi.Hello(param_name)
}

func init() {
seq.Register("hi", 1, proxy_Hello)
}

這個簡單的程序內容是這樣的
// main.go
package main

import (
"golang.org/x/mobile/app"

_ "golang.org/x/mobile/bind/java"
_ "example/hi/go_hi"
)

func main() {
app.Run(app.Callbacks{})
}

src/MyActivity.java文件內容是這樣的
import ...
import go.Go; // 引入Go這個包
import go.hi.Hi; // gobind生成的代碼

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Go.init(getApplicationContext()); // 初始化兩個線程
Hi.Hello("world");
}
}

其中有一句Go.init(...)這里再看go.Go這個包是什麼樣子的
public final class Go {
// init loads libgojni.so and starts the runtime.
public static void init(Context context) {
... 判斷該函數是否該執行的代碼 -- 省略 --
System.loadLibrary("gojni"); // gojni需要這句

new Thread("GoMain") {
public void run() {
Go.run(); // run()是一個native方法
}
}.start();

Go.waitForRun(); // 這個也是一個native方法

// 這部分可以理解為,啟動了一個後台線程不斷的接收結果到緩存中。
new Thread("GoReceive") {
public void run() { Seq.receive(); }
}.start();
}

private static boolean running = false;

private static native void run();
private static native void waitForRun();
}

MyActivity.java中還有段代碼是 Hi.Hello("world");,打開Hi.java路徑在src/go/hi/Hi.java,這個文件也是gobind生成的,是用來給java方便的調用.so文件
// Hi.java
// File is generated by gobind. Do not edit.
package go.hi;

import go.Seq;

public abstract class Hi {
private Hi() {} // uninstantiable

public static void Hello(String name) {
go.Seq _in = new go.Seq();
go.Seq _out = new go.Seq();
_in.writeUTF16(name);
Seq.send(DESCRIPTOR, CALL_Hello, _in, _out); // 下面接著說
}

private static final int CALL_Hello = 1;
private static final String DESCRIPTOR = "hi";
}

Seq.send這部分實際上最終調用的是一段go代碼
func Send(descriptor string, code int, req *C.uint8_t, reqlen C.size_t, res **C.uint8_t, reslen *C.size_t) {
fn := seq.Registry[descriptor][code]
in := new(seq.Buffer)
if reqlen > 0 {
in.Data = (*[maxSliceLen]byte)(unsafe.Pointer(req))[:reqlen]
}
out := new(seq.Buffer)
fn(out, in)
seqToBuf(res, reslen, out)
}

B. 如何Golang開發Android應用

如何Golang開發Android應用:

一丶准備

1.一台Linux 64的機器

2.一個帶有AndroidStudioIDE的開發機器

因為環境配置實在復雜,所以引入的docker。

docker pull codeskyblue/docker-goandroid
docker run --rm -ti codeskyblue/docker-goandroid bash

cd example; echo "view example projects
docker起來之後,什麼就都配置好了,NDK,java,GO的環境變數了,等等,並且還預裝了vim,gradle,tmux,git,syncthing,svn


二丶代碼


1.寫代碼之前,先約定下目錄結構

go的代碼都放在src/golib下,編譯使用make.bash編譯腳本,看下這個文件樹

.
|-- app.iml
|-- build.gradle
|-- libs/armeabi-v7a # go編譯生成的so文件
| `-- libgojni.so
|-- main.go_tmpl # 一個模板文件,先不用管它
|-- make.bash # 編譯腳本,用來生成.so和Java代碼
`-- src
|-- golib
| |-- hi
| | |-- go_hi֞֞֞ # 自動生成的代碼
| | | `-- go_hi.go
| | `-- hi.go # 需要編寫的代碼
| `-- main.go
`-- main
|-- AndroidManifest.xml
|-- java
| |-- go # 自動生成的代碼
| | |-- Go.java
| | |-- Seq.java
| | `-- hi
| | `-- Hi.java
| `-- me/shengxiang/gohello # 主要的邏輯代碼
| `-- MainActivity.java֞֞֞
`-- res
2.寫了一個例子

git clone

3.編譯下,試試行不行(就算不行問題應該也不大,因為大問題都被消滅了)

cd GoHello/app
./make.bash
../gradlew build

4.一切順利的話在build/outputs/apk下應該可以看到app-debug.apk這個文件。

編譯好的放到qiniu上了,可以點擊下載看看

下面可以嘗試改改

打開hi.go這個文件

hi.go的內容,比較簡單,寫Go代碼主要就是這部分

// Package hi provides a function for saying hello.
package hi

import "fmt"

func Hello(name string) {
fmt.Printf("Hello, %s! ", name)
return "(Go)World"
}
5.文件末尾添加下面這行代碼

func Welcome(name string) string {
return fmt.Sprintf("Welcome %s to the go world", name)
}

使用./make.bash重新編譯下

6.打開MainActivity.java修改下OnClickListener事件

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = Hi.Welcome("yourname");
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});

編譯運行下,把生成的apk安裝到手機上試試。

C. 6.2、Android Studio 添加編譯依賴

文章摘要
1、 三種依賴類型
2、庫依賴關系配置
3、遠程倉庫
4、查看依賴關系樹

英文文獻

Android Studio中的搖籃構建系統可以很容易地包括外部的二進制文件或其他庫模塊到您的構建與依賴。該依賴性可以位於您的計算機上或遠程倉庫中,他們宣布任何傳遞依賴將自動包括在內。

要添加一個依賴於你的項目,指定諸如依賴配置compile在dependencies您的塊build.gradle文件。

例如,下面build.gradle為應用模塊文件包括三種不同類型的依賴關系:

每個這些要求不同類型的依賴關系如下:

此聲明一有依賴性 的Android庫模塊 名為「在MyLibrary」(此名稱必須定義為庫名稱相匹配include你的 settings.gradle 文件)。它需要構建系統編譯庫模塊與應用模塊,並在您的APK所產生的AAR文件。

由於Gradle讀取相對路徑的build.gradle 文件,這告訴構建系統添加您的項目內的所有JAR文件 mole_name/libs/的目錄的依賴。
或者,您可以指定單獨的文件如下:

這實際上是以下簡寫:

這宣告了「應用程序魔」庫的12.3版本的依賴,在「code.example.android」命名空間組內。

內側dependencies塊,可以聲明使用幾種不同的一個庫依賴依賴關系配置(諸如compile上面示出)。每個相關配置提供了搖籃有關如何使用圖書館不同的指令。下面的列表描述了每個可使用在你的Android項目庫依賴的配置。

以上配置適用於項目的主要來源集,它適用於所有的構建變種。
如果你不是想聲明的依賴只有特定的 構建變數 源設置或更改一個 測試源設置 ,你必須利用配置名稱以及與構建變數或測試源集的名稱前綴它。

例如,在添加compile
依賴關系只為您的「免費」產品的風味(使用遠程二進制依賴),它看起來像這樣:

但是,如果你想添加一個依賴於結合了產品的風味變體和構建類型,那麼你必須初始化的配置名稱configurations塊。下面的示例增加了一個apk依賴於你的「freeDebug」打造變種(使用本地二進制依賴):

要添加compile為本地測試和儀表測試的依賴性,它看起來像這樣:

如果你的 庫模塊提供了多個變種 ,你可以添加不同的庫變體像這樣不同的應用程序變數:

當你的依賴比當地的圖書館或文件樹以外的東西,搖籃會在哪個在線存儲庫中指定的文件 repositories的塊build.gradle文件。

默認情況下,新的Android Studio項目申報JCenter作為該項目的頂級存儲庫位置build.gradle的文件,如下圖所示:

如果你想從Maven的中央倉庫的東西,然後再添加 mavenCentral(),或本地存儲庫使用mavenLocal():

參考配置:

有些直接依賴可能有自己的依賴。這些被稱為 傳遞依賴 。而不是要求您手動聲明每個傳遞依賴,搖籃自動收集,並增加了它們。為了形象化兩個項目的直接和傳遞依賴,對於搖籃的Android插件提供了生成依賴關系樹為每個搖籃任務 構建變數 和 測試源集合 。

要生成此報告,步驟如下:

下面的示例報告顯示調試構建變數的依賴關系樹,包括前面例子中的本地庫模塊依賴和遠程依賴性。

D. android系統的手機目錄各個文件夾代表什麼例如acct

1、acct文件夾:根目錄/acct/ ,系統回收站,誤刪除的系統文件恢復ACCT計算機語言,系統調用禁止/啟用系統記錄進程信息。

2、cache文件夾:緩存(cache) 文件。只是內存中少部分數據的復製品,先於內存與CPU交換數據,因此速率很快。

3、config文件夾:(計算機系統)配置。如:系統里的config.sys就是系統自動配置文件,它是在用戶開機這段時間對計算機進行初始化設置,也就是用戶對系統的設置都由它來對計算機進行恢復。

4、system:Android 系統文件。主要包括usr(用戶文件夾,包含共享、鍵盤布局、時間區域文件等) ,app(常規下載的應用程序,這些 apk 包都是受保護的), lib(系統底層庫,如平台運行時庫等)等。

5、etc:系統主要配置文件,比如APN接入點設置等核心配置等。

6、data:用戶程序目錄。存儲手機系統文件和安裝軟體的數據文件,不能隨便刪除。

E. Android項目目錄哪個視圖中的樹形結構和實際工程文件夾存儲相同

Android視圖:app/manifests
Project視圖對應的文件夾:app/src/main/AndroidManifest.xml
Android視圖:app/java
Project視圖對應的文件夾:app/src/main/java
Android視圖:app/cpp
Project視圖對應的文件夾:app/src/main/jni
Android視圖:app/aidl
Project視圖對應的文件夾:app/src/main/aidl
Android視圖:app/renderscript
Project視圖對應的文件夾:app/src/main/rs

熱點內容
app什麼情況下找不到伺服器 發布:2025-05-12 15:46:25 瀏覽:714
php跳過if 發布:2025-05-12 15:34:29 瀏覽:467
不定時演算法 發布:2025-05-12 15:30:16 瀏覽:131
c語言延時1ms程序 發布:2025-05-12 15:01:30 瀏覽:166
動物園靈長類動物配置什麼植物 發布:2025-05-12 14:49:59 瀏覽:736
wifi密碼設置什麼好 發布:2025-05-12 14:49:17 瀏覽:148
三位數乘兩位數速演算法 發布:2025-05-12 13:05:48 瀏覽:399
暴風影音緩存在哪裡 發布:2025-05-12 12:42:03 瀏覽:544
access資料庫exe 發布:2025-05-12 12:39:04 瀏覽:632
五開的配置是什麼 發布:2025-05-12 12:36:37 瀏覽:365