安卓json数据保存到assets

安卓json数据保存到assets,第1张

新建assets文件,并将json文件复制到此文件夹中

在main文件夹下新建assets文件,然后再assets文件中新建namelist.json文件夹,将json数据复制到test.json文件中。

2、访问json文件

try {

AssetManager assetManager = getAssets()// 获得assets资源管理器(assets中的文件无法直接访问,可以使用AssetManager访问)

InputStreamReader inputStreamReader = new InputStreamReader(assetManager.open("namelist.json"),"UTF-8")// 使用IO流读取json文件内容

BufferedReader br = new BufferedReader(inputStreamReader)

String line

StringBuilder builder = new StringBuilder()

while ((line = br.readLine())!=null){

builder.append(line)

}

br.close()

inputStreamReader.close()

JSONObject testJson = new JSONObject(builder.toString())// 从builder中读取了json中的数据。

// 直接传入JSONObject来构造一个实例

JSONArray array = testJson.getJSONArray("nameList")

Log.e("nameList",array.toString())

for (int i = 0i

strings[i] = array.getString(i)

}

} catch (IOException e) {

e.printStackTrace()

} catch (JSONException e) {

先打开assets里的文件到输入流,再从输入流中写人SD卡

public boolean readFilefromAssets(Context context, String assetsFile){

InputStream stream = assets.open(assetsFile)

if (stream == null) {

Toast.makeText(context, "assets no such file", Toast.LENGTH_SHORT)

.show()

return false

}

String folder = File.separator + "mnt" + File.separator + "sdcard"

+ File.separator + "Android" + File.separator + "data"

File f = new File(folder)

if (!f.exists()) {

f.mkdir()

}

String filePath = File.separator + "mnt" + File.separator + "sdcard"

+ File.separator + "Android" + File.separator + "data"

+ File.separator + "file.text"

File file = new File(filePath)

OutputStream output = null

try {

output = new FileOutputStream(file)

final byte[] buffer = new byte[1024]

int read

while ((read = stream.read(buffer)) != -1) {

output.write(buffer, 0, read)

}

output.flush()

} catch (Exception e1) {

e1.printStackTrace()

} finally {

try {

output.close()

stream.close()

} catch (IOException e) {

e.printStackTrace()

}

}

}

根据 Google Play的政策 要求,自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle(以下简称aab) 进行发布。该格式将取代 APK 作为标准发布格式

正常情况下直接用AS的打包生成aab就可以满足需求,上传到Google play了。

但是会有这么一个问题,并不是所有时候你都可以拿到一个游戏工程或者源码的,如果给你的是一个apk包,那你怎么办呢?

接下来,就向大家介绍如何从apk一步步转化成aab。

解压apk

通过apktool去解压apk包

解压apk后 decode_apk_dir 目录结构:

编译资源

编译资源使用aapt2编译生成 *.flat文件集合

生成compiled_resources.zip文件

关联资源

生成base.apk

解压base.apk

解压到base文件夹,目录结构:

拷贝资源

创建base文件夹,以base文件夹为根目录

将解压得到的resources.pb拷贝到 ./temp/base/resources.pb

将解压得到的res拷贝到 ./temp/base/res

创建manifest文件夹, 将解压得到的AndroidManifest.xml拷贝到 ./temp/base/manifest

拷贝assets , 将 ./temp/decode_apk_dir/assets 拷贝到 ./temp/base/assets

拷贝lib, 将 ./temp/decode_apk_dir/lib 拷贝到 ./temp/base/lib

创建root文件夹,拷贝unknown, 将 ./temp/decode_apk_dir/unknown 拷贝到 ./temp/base/root/unknown

拷贝kotlin, 将 ./temp/decode_apk_dir/kotlin拷贝到 ./temp/base/root/kotlin

root目录下创建META-INF文件夹,得到 ./temp/base/root/META-INF

创建dex 文件夹,将 ./temp/decode_apk_dir/*.dex拷贝到 ./temp/base/dex(多个dex都要一起拷贝过来)

最终的目录结构

压缩资源

将base文件夹,压缩成base.zip 一定要zip格式

注意:压缩后双击打开显示的是所有资源,而不是显示base,点击base再显示所有资源;否则会报AndroidManifest.xml找不到的错

编译aab

打包app bundle需要使用bundletool

aab签名

注意 :您不能使用 apksigner 为 aab 签名。签名aab的时候不需要使用v2签名,使用JDK的普通签名就行。

限于篇幅,Aab的测试与安装放在下一篇文章

详见 Aab(Android App Bundle)测试与安装

过程中有问题或者需要交流的同学、独立开发者同学、都可以私信我拉群(加好友的备注下,因为Apk转Aab和独立开发俱乐部,是分开的两个群)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11999837.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存