我有以下/res/values/uris.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="bladder">blahblah</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
我在代码中访问它:
private String bladderUrl= getString(R.string.bladder);
Run Code Online (Sandbox Code Playgroud)
但它返回null.我不知道为什么?
我想preloaded database在我的应用程序中使用意味着在安装apk时尝试获取数据库,因此可以使用已经保存的数据.我复制
assets文件夹中的"ingredients.db"文件.并使用以下代码,但这会收到错误"从资源文件复制数据库的问题"
我怎么解决这个问题?请建议我尽可能的方式
我的数据库帮助程序类是这样的
class IngredientHelper extends SQLiteOpenHelper {
private static final String DATABASE_PATH = "/data/data/com.example.preloadeddatabase/databases/";
private static final String DATABASE_NAME = "ingredients.db";
private static final String TABLE_NAME = "Ingredients";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_TITLE = "ingredient_name";
private static final int SCHEMA_VERSION = 1;
public SQLiteDatabase dbSqlite;
private final Context myContext;
public IngredientHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
this.myContext = context;
}
@Override
public void onCreate(SQLiteDatabase …Run Code Online (Sandbox Code Playgroud) 我需要在C/C++代码中处理我的资源文件夹中的资产.像这样缓存指向AAssetManager的指针是否安全......:
AAssetManager* assetMgr = NULL;
void Java_com_example_createAssetManager(JNIEnv* env, jclass clazz, jobject assetManager)
{
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
assert(NULL != mgr);
assetMgr = mgr;
}
Run Code Online (Sandbox Code Playgroud)
......然后在我需要的时候使用它?createAssetManager是从主要Activity(UI线程)的Java onCreate方法调用的,但C/C++中的用法是在GLSurfaceView实现中从本机方法本地处理渲染和游戏滴答时.
1)assetMgr指针会指向整个应用程序生命周期内的有效对象吗?是否足够创建它也像Java端的静态变量(在Activity类中)所以垃圾收集器不会销毁它?
2)是否有一些危险我会遇到线程的一些问题?
谢谢Tom Tom
我在哪里可以找到Android"向上"按钮,以便我可以自定义它?或者它的文件名是什么,以便我可以快速搜索到在sdk目录中找到它?
我正在构建一个当前从drawable文件夹中读取图像的应用程序.由于我不能在drawable中有子文件夹,我必须在assets文件夹中创建子文件夹并从那里加载图像.有什么方法可以创建一个List或ArrayList与资产子文件夹中的所有图像?
我的代码是这样的:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
// Keep all Images in array
public Integer[] mThumbIds = {
R.drawable.pic_2,
R.drawable.pic_3, R.drawable.pic_4,
R.drawable.pic_5, R.drawable.pic_6,
R.drawable.pic_7, R.drawable.pic_8,
R.drawable.pic_9, R.drawable.pic_10,
R.drawable.pic_11, R.drawable.pic_12,
R.drawable.pic_13, R.drawable.pic_14,
R.drawable.pic_15
};
// Constructor
public ImageAdapter(Context c){
mContext = c;
}
@Override
public int getCount() {
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
return mThumbIds[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int …Run Code Online (Sandbox Code Playgroud) 我搜索了解是否有一种技术可以在Android应用程序中保持训练有素的张量流模型(.pb文件)安全,但没有找到任何有用的东西.我发布了一个包含张量流模型的应用程序,我在训练集上构建了该模型.当我发布应用程序时,任何人都可以访问该模型并将其用于自己的应用程序.我想知道是否有办法保护我放在Android应用程序资产文件夹中的张量流模型?
这是我在Android中加载模型的方式:
TensorFlowInferenceInterface tf = new TensorFlowInferenceInterface();
tf.initializeTensorFlow(context.getAssets(), "file:///android_asset/model.pb");
Run Code Online (Sandbox Code Playgroud)
我想在应用程序中嵌入加密的模型并在运行时解密它,但如果有人调试应用程序,它可以获取密码并解密它.而且,TensorFlowInferenceInterface类中只有一个initizeTensorFlow方法的实现只接受(AssetManager assetManager,String model).可以写一个接受加密的一个,但它需要对Tensorflow C++库进行一些修改.我想知道是否有更可靠的解决方案.请问有什么建议吗?
作为 Android 编程的新手,我已将四个文件附加到我的库的资产文件夹中。
您可以看到附图。
我想使用下面的代码通过 Android 库访问这些文件(如果我不在 Android 库中使用此代码,则当我在 MainActivity 中使用它时,它运行时不会出现错误)。
public void copy_weights() {
try {
AssetManager assetFiles = getAssets();
String[] files = assetFiles.list("");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace(); //catch the error in this line
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但这段代码给了我错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.Context.getAssets' on a null object refrence
我尝试了其他方法,例如直接访问home:///android_asset/7.cfg,但也无法访问文件。
编辑1
我像下面这样copy_weights()调用mainActivity
public class MainActivity extends AppCompatActivity {
@Override …Run Code Online (Sandbox Code Playgroud) 我的 Flutter 应用程序中的资产总共大约 300 MB(大量媒体文件,这是应用程序的本质,不能合理地减少)。
据我了解,有两种方法可以将应用上传到 Play 商店:
对于 APK,解决此限制的方法是APK 扩展文件(通常为“obb”文件),最大可达 2 GB。我可以尝试让它与 Flutter 一起使用,但 APK 交付方法有点过时,并且还有其他缺点,例如使用未使用的二进制文件增加安装大小。所以我宁愿不使用这种方法。
对于 App Bundles,类似的机制以动态资产交付的形式存在。有三个选项,具体取决于用户何时下载资产包:安装期间、安装后或按需。该install-time选项听起来最透明和简单,并且限制为 1 GB,因此它非常适合我的用例。
遗憾的是,Flutter尚不支持动态资产交付。幸运的是,在使用install-time交付时,看起来这些资产可以通过AssetManager系统提供的常规类获得。一开始我以为 Flutter 可能会在不需要编写任何 Java/Kotlin 代码的情况下获取它们,但是没有,它使用自己的资产机制,并且除了一个访问AssetManager. 因此,我必须自己做一些跑腿工作才能与 Java 世界进行交互,但这听起来可行。
为了首先创建包,我遵循了以下步骤。 …
我曾经在Android应用程序中搜索创建assets文件夹,我尝试过的解决方案 <App Name>/src/assets/fonts/
但是当我尝试在我的应用程序中使用ttf文件时,我有一个错误:
代码 :
mFace = Typeface.createFromAsset(mContext.getAssets(),"fonts/fontType.ttf");
Run Code Online (Sandbox Code Playgroud)
和错误:
无法制作原生字体
我不知道资产文件夹是否在好地方.
我在这堂课的一个片段里面:
public class NetworksList extends Fragment{
Run Code Online (Sandbox Code Playgroud)
在我的onCreate函数里面我也有这段代码:
XmlPullParserFactory pullParserFactory;
try {
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullParserFactory.newPullParser();
InputStream in_s = getActivity().getApplicationContext().getAssets().open("temp.xml");
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in_s, null);
Toast.makeText(getActivity().getApplicationContext(), "size: ", Toast.LENGTH_LONG).show();
parseXML(parser);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
希望我尝试用来打开XML文件.我在资源文件夹中有我的XML文件,但我得到:
05-08 18:03:11.034 24645-24645/pt.smartgeo.aees W/System.err? java.io.FileNotFoundException: temp.xml
05-08 18:03:11.034 24645-24645/pt.smartgeo.aees W/System.err? at android.content.res.AssetManager.openAsset(Native Method)
05-08 18:03:11.034 24645-24645/pt.smartgeo.aees W/System.err? at android.content.res.AssetManager.open(AssetManager.java:316)
05-08 18:03:11.034 24645-24645/pt.smartgeo.aees W/System.err? at android.content.res.AssetManager.open(AssetManager.java:290)
05-08 18:03:11.034 24645-24645/pt.smartgeo.aees …Run Code Online (Sandbox Code Playgroud) android ×10
android-assets ×10
java ×2
xml ×2
android-ndk ×1
arraylist ×1
assets ×1
encryption ×1
flutter ×1
google-play ×1
obfuscation ×1
sqlite ×1
tensorflow ×1