דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. אנדרואיד - כללי
  3. הפורום למפתחים
  4. בקשת מידע | בניית חנות אפליקציות אופליין

בקשת מידע | בניית חנות אפליקציות אופליין

מתוזמן נעוץ נעול הועבר הפורום למפתחים
10 פוסטים 4 כותבים 276 צפיות 6 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • פ מנותק
    פ מנותק
    פראירי
    מורחק
    כתב נערך לאחרונה על ידי
    #1

    אני רוצה לבנות חנות אפליקציות אופליין-שאני יזין את נתיבי קבצי הAPK והחנות תתקין אותם ע"פ בחירה
    כמובן עם הרשאת רוט די שהחנות תתקין בעצמה
    ביקשתי מGPT והביא לי קוד מלא אבל אני פחות יודע איך לקמפל זאת לאפליקצייה באנדרואיד סטודיו
    אשמח אם מישהו יוכל לעזור
    זה הקוד שהוא נתן

    # קוד מלא לאפליקציה להתקנת APK עם הרשאות רוט באנדרואיד (גרסאות 8-10) עם תמונות ממוזערות

    מבנה כללי של האפליקציה

    האפליקציה תציג רשימה של אפליקציות עם תמונות ממוזערות, וכאשר לוחצים על אחת מהן, היא תתקין את קובץ ה-APK באופן עצמאי.

    קובץ AndroidManifest.xml

    הוסף את ההרשאות הבאות כדי לאפשר שימוש בהרשאות רוט והתקנת חבילות:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.apkinstaller">
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
        <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    ממשק משתמש

    קובץ activity_main.xml להצגת הרשימה:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <ListView
            android:id="@+id/apkListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </LinearLayout>
    

    פריסה מותאמת אישית לפריט ברשימה

    קובץ list_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="8dp">
    
        <ImageView
            android:id="@+id/appIcon"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:contentDescription="@string/app_icon" />
    
        <TextView
            android:id="@+id/appName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:textSize="16sp" />
    
    </LinearLayout>
    

    קוד הפעילות הראשית (MainActivity)

    קובץ MainActivity.kt:

    package com.example.apkinstaller
    
    import android.Manifest
    import android.content.pm.PackageManager
    import android.content.pm.PackageManager.NameNotFoundException
    import android.graphics.drawable.Drawable
    import android.os.Bundle
    import android.widget.ListView
    import android.widget.Toast
    import androidx.appcompat.app.AppCompatActivity
    import androidx.core.app.ActivityCompat
    import androidx.core.content.ContextCompat
    
    class MainActivity : AppCompatActivity() {
    
        data class ApkItem(val name: String, val path: String, val icon: Drawable?)
    
        private val apkFiles = listOf(
            ApkItem("First App", "/storage/emulated/0/Download/first_app.apk", null),
            ApkItem("Second App", "/storage/emulated/0/Download/second_app.apk", null),
            ApkItem("Third App", "/storage/emulated/0/Download/third_app.apk", null)
        )
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // בדיקת הרשאות לקריאה וכתיבה
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 1)
            }
    
            // עדכון הרשימה עם אייקונים
            val apkList = apkFiles.map {
                val icon = getApkIcon(it.path)
                ApkItem(it.name, it.path, icon)
            }
    
            val listView: ListView = findViewById(R.id.apkListView)
            val adapter = ApkListAdapter(this, apkList)
            listView.adapter = adapter
    
            listView.setOnItemClickListener { _, _, position, _ ->
                val apkPath = apkList[position].path
                installAPK(apkPath)
            }
        }
    
        private fun getApkIcon(apkPath: String): Drawable? {
            val pm = packageManager
            return try {
                val info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES)
                info?.applicationInfo?.let {
                    it.sourceDir = apkPath
                    it.publicSourceDir = apkPath
                    pm.getApplicationIcon(it)
                }
            } catch (e: NameNotFoundException) {
                null
            }
        }
    
        private fun installAPK(filePath: String) {
            try {
                val process = Runtime.getRuntime().exec("su")
                val outputStream = process.outputStream.bufferedWriter()
                outputStream.write("pm install -r $filePath\n")
                outputStream.flush()
                outputStream.write("exit\n")
                outputStream.flush()
                process.waitFor()
    
                if (process.exitValue() == 0) {
                    Toast.makeText(this, "התקנה הצליחה", Toast.LENGTH_SHORT).show()
                } else {
                    Toast.makeText(this, "התקנה נכשלה", Toast.LENGTH_SHORT).show()
                }
            } catch (e: Exception) {
                e.printStackTrace()
                Toast.makeText(this, "שגיאה: ${e.message}", Toast.LENGTH_LONG).show()
            }
        }
    }
    

    מתאם מותאם אישית (Adapter)

    קובץ ApkListAdapter.kt:

    package com.example.apkinstaller
    
    import android.content.Context
    import android.graphics.drawable.Drawable
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.BaseAdapter
    import android.widget.ImageView
    import android.widget.TextView
    
    class ApkListAdapter(private val context: Context, private val data: List<MainActivity.ApkItem>) : BaseAdapter() {
    
        override fun getCount(): Int = data.size
    
        override fun getItem(position: Int): MainActivity.ApkItem = data[position]
    
        override fun getItemId(position: Int): Long = position.toLong()
    
        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
            val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)
    
            val iconView: ImageView = view.findViewById(R.id.appIcon)
            val nameView: TextView = view.findViewById(R.id.appName)
    
            val item = getItem(position)
            iconView.setImageDrawable(item.icon ?: context.getDrawable(android.R.drawable.sym_def_app_icon))
            nameView.text = item.name
    
            return view
        }
    }
    

    הערות חשובות

    1. הרשאות רוט:
      ודא שהמכשיר שלך פרוץ (Rooted) ושיש לך גישה להרשאות רוט.
    2. נתיבי קבצים:
      ודא שקבצי ה-APK נמצאים בנתיבים הנכונים שצוינו ברשימה apkFiles.
    3. תמונות ממוזערות:
      הקוד מושך את האייקון של האפליקציה מתוך קובץ ה-APK, במידה וזה אפשרי.
    4. גרסאות אנדרואיד:
      הקוד מותאם לגרסאות 8-10 וייתכן שידרוש התאמות לגרסאות אחרות.

    אם יש לך שאלות נוספות או בעיות בהפעלת הקוד, אשמח לעזור!

    א.מ.ד.א תגובה 1 תגובה אחרונה
    0
    • פ פראירי

      אני רוצה לבנות חנות אפליקציות אופליין-שאני יזין את נתיבי קבצי הAPK והחנות תתקין אותם ע"פ בחירה
      כמובן עם הרשאת רוט די שהחנות תתקין בעצמה
      ביקשתי מGPT והביא לי קוד מלא אבל אני פחות יודע איך לקמפל זאת לאפליקצייה באנדרואיד סטודיו
      אשמח אם מישהו יוכל לעזור
      זה הקוד שהוא נתן

      # קוד מלא לאפליקציה להתקנת APK עם הרשאות רוט באנדרואיד (גרסאות 8-10) עם תמונות ממוזערות

      מבנה כללי של האפליקציה

      האפליקציה תציג רשימה של אפליקציות עם תמונות ממוזערות, וכאשר לוחצים על אחת מהן, היא תתקין את קובץ ה-APK באופן עצמאי.

      קובץ AndroidManifest.xml

      הוסף את ההרשאות הבאות כדי לאפשר שימוש בהרשאות רוט והתקנת חבילות:

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.apkinstaller">
      
          <uses-permission android:name="android.permission.INTERNET" />
          <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
          <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
      
          <application
              android:allowBackup="true"
              android:label="@string/app_name"
              android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
              <activity android:name=".MainActivity">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          </application>
      
      </manifest>
      

      ממשק משתמש

      קובץ activity_main.xml להצגת הרשימה:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <ListView
              android:id="@+id/apkListView"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
      </LinearLayout>
      

      פריסה מותאמת אישית לפריט ברשימה

      קובץ list_item.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal"
          android:padding="8dp">
      
          <ImageView
              android:id="@+id/appIcon"
              android:layout_width="48dp"
              android:layout_height="48dp"
              android:contentDescription="@string/app_icon" />
      
          <TextView
              android:id="@+id/appName"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginStart="16dp"
              android:textSize="16sp" />
      
      </LinearLayout>
      

      קוד הפעילות הראשית (MainActivity)

      קובץ MainActivity.kt:

      package com.example.apkinstaller
      
      import android.Manifest
      import android.content.pm.PackageManager
      import android.content.pm.PackageManager.NameNotFoundException
      import android.graphics.drawable.Drawable
      import android.os.Bundle
      import android.widget.ListView
      import android.widget.Toast
      import androidx.appcompat.app.AppCompatActivity
      import androidx.core.app.ActivityCompat
      import androidx.core.content.ContextCompat
      
      class MainActivity : AppCompatActivity() {
      
          data class ApkItem(val name: String, val path: String, val icon: Drawable?)
      
          private val apkFiles = listOf(
              ApkItem("First App", "/storage/emulated/0/Download/first_app.apk", null),
              ApkItem("Second App", "/storage/emulated/0/Download/second_app.apk", null),
              ApkItem("Third App", "/storage/emulated/0/Download/third_app.apk", null)
          )
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_main)
      
              // בדיקת הרשאות לקריאה וכתיבה
              if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                  ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 1)
              }
      
              // עדכון הרשימה עם אייקונים
              val apkList = apkFiles.map {
                  val icon = getApkIcon(it.path)
                  ApkItem(it.name, it.path, icon)
              }
      
              val listView: ListView = findViewById(R.id.apkListView)
              val adapter = ApkListAdapter(this, apkList)
              listView.adapter = adapter
      
              listView.setOnItemClickListener { _, _, position, _ ->
                  val apkPath = apkList[position].path
                  installAPK(apkPath)
              }
          }
      
          private fun getApkIcon(apkPath: String): Drawable? {
              val pm = packageManager
              return try {
                  val info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES)
                  info?.applicationInfo?.let {
                      it.sourceDir = apkPath
                      it.publicSourceDir = apkPath
                      pm.getApplicationIcon(it)
                  }
              } catch (e: NameNotFoundException) {
                  null
              }
          }
      
          private fun installAPK(filePath: String) {
              try {
                  val process = Runtime.getRuntime().exec("su")
                  val outputStream = process.outputStream.bufferedWriter()
                  outputStream.write("pm install -r $filePath\n")
                  outputStream.flush()
                  outputStream.write("exit\n")
                  outputStream.flush()
                  process.waitFor()
      
                  if (process.exitValue() == 0) {
                      Toast.makeText(this, "התקנה הצליחה", Toast.LENGTH_SHORT).show()
                  } else {
                      Toast.makeText(this, "התקנה נכשלה", Toast.LENGTH_SHORT).show()
                  }
              } catch (e: Exception) {
                  e.printStackTrace()
                  Toast.makeText(this, "שגיאה: ${e.message}", Toast.LENGTH_LONG).show()
              }
          }
      }
      

      מתאם מותאם אישית (Adapter)

      קובץ ApkListAdapter.kt:

      package com.example.apkinstaller
      
      import android.content.Context
      import android.graphics.drawable.Drawable
      import android.view.LayoutInflater
      import android.view.View
      import android.view.ViewGroup
      import android.widget.BaseAdapter
      import android.widget.ImageView
      import android.widget.TextView
      
      class ApkListAdapter(private val context: Context, private val data: List<MainActivity.ApkItem>) : BaseAdapter() {
      
          override fun getCount(): Int = data.size
      
          override fun getItem(position: Int): MainActivity.ApkItem = data[position]
      
          override fun getItemId(position: Int): Long = position.toLong()
      
          override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
              val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)
      
              val iconView: ImageView = view.findViewById(R.id.appIcon)
              val nameView: TextView = view.findViewById(R.id.appName)
      
              val item = getItem(position)
              iconView.setImageDrawable(item.icon ?: context.getDrawable(android.R.drawable.sym_def_app_icon))
              nameView.text = item.name
      
              return view
          }
      }
      

      הערות חשובות

      1. הרשאות רוט:
        ודא שהמכשיר שלך פרוץ (Rooted) ושיש לך גישה להרשאות רוט.
      2. נתיבי קבצים:
        ודא שקבצי ה-APK נמצאים בנתיבים הנכונים שצוינו ברשימה apkFiles.
      3. תמונות ממוזערות:
        הקוד מושך את האייקון של האפליקציה מתוך קובץ ה-APK, במידה וזה אפשרי.
      4. גרסאות אנדרואיד:
        הקוד מותאם לגרסאות 8-10 וייתכן שידרוש התאמות לגרסאות אחרות.

      אם יש לך שאלות נוספות או בעיות בהפעלת הקוד, אשמח לעזור!

      א.מ.ד.א מנותק
      א.מ.ד.א מנותק
      א.מ.ד.
      כתב נערך לאחרונה על ידי
      #2

      @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

      אני רוצה לבנות חנות אפליקציות אופליין-שאני יזין את נתיבי קבצי הAPK והחנות תתקין אותם ע"פ בחירה
      כמובן עם הרשאת רוט די שהחנות תתקין בעצמה
      ביקשתי מGPT והביא לי קוד מלא אבל אני פחות יודע איך לקמפל זאת לאפליקצייה באנדרואיד סטודיו
      אשמח אם מישהו יוכל לעזור
      זה הקוד שהוא נתן

      # קוד מלא לאפליקציה להתקנת APK עם הרשאות רוט באנדרואיד (גרסאות 8-10) עם תמונות ממוזערות

      מבנה כללי של האפליקציה

      האפליקציה תציג רשימה של אפליקציות עם תמונות ממוזערות, וכאשר לוחצים על אחת מהן, היא תתקין את קובץ ה-APK באופן עצמאי.

      קובץ AndroidManifest.xml

      הוסף את ההרשאות הבאות כדי לאפשר שימוש בהרשאות רוט והתקנת חבילות:

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.apkinstaller">
      
          <uses-permission android:name="android.permission.INTERNET" />
          <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
          <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
      
          <application
              android:allowBackup="true"
              android:label="@string/app_name"
              android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
              <activity android:name=".MainActivity">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          </application>
      
      </manifest>
      

      ממשק משתמש

      קובץ activity_main.xml להצגת הרשימה:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <ListView
              android:id="@+id/apkListView"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
      </LinearLayout>
      

      פריסה מותאמת אישית לפריט ברשימה

      קובץ list_item.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal"
          android:padding="8dp">
      
          <ImageView
              android:id="@+id/appIcon"
              android:layout_width="48dp"
              android:layout_height="48dp"
              android:contentDescription="@string/app_icon" />
      
          <TextView
              android:id="@+id/appName"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginStart="16dp"
              android:textSize="16sp" />
      
      </LinearLayout>
      

      קוד הפעילות הראשית (MainActivity)

      קובץ MainActivity.kt:

      package com.example.apkinstaller
      
      import android.Manifest
      import android.content.pm.PackageManager
      import android.content.pm.PackageManager.NameNotFoundException
      import android.graphics.drawable.Drawable
      import android.os.Bundle
      import android.widget.ListView
      import android.widget.Toast
      import androidx.appcompat.app.AppCompatActivity
      import androidx.core.app.ActivityCompat
      import androidx.core.content.ContextCompat
      
      class MainActivity : AppCompatActivity() {
      
          data class ApkItem(val name: String, val path: String, val icon: Drawable?)
      
          private val apkFiles = listOf(
              ApkItem("First App", "/storage/emulated/0/Download/first_app.apk", null),
              ApkItem("Second App", "/storage/emulated/0/Download/second_app.apk", null),
              ApkItem("Third App", "/storage/emulated/0/Download/third_app.apk", null)
          )
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_main)
      
              // בדיקת הרשאות לקריאה וכתיבה
              if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                  ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 1)
              }
      
              // עדכון הרשימה עם אייקונים
              val apkList = apkFiles.map {
                  val icon = getApkIcon(it.path)
                  ApkItem(it.name, it.path, icon)
              }
      
              val listView: ListView = findViewById(R.id.apkListView)
              val adapter = ApkListAdapter(this, apkList)
              listView.adapter = adapter
      
              listView.setOnItemClickListener { _, _, position, _ ->
                  val apkPath = apkList[position].path
                  installAPK(apkPath)
              }
          }
      
          private fun getApkIcon(apkPath: String): Drawable? {
              val pm = packageManager
              return try {
                  val info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES)
                  info?.applicationInfo?.let {
                      it.sourceDir = apkPath
                      it.publicSourceDir = apkPath
                      pm.getApplicationIcon(it)
                  }
              } catch (e: NameNotFoundException) {
                  null
              }
          }
      
          private fun installAPK(filePath: String) {
              try {
                  val process = Runtime.getRuntime().exec("su")
                  val outputStream = process.outputStream.bufferedWriter()
                  outputStream.write("pm install -r $filePath\n")
                  outputStream.flush()
                  outputStream.write("exit\n")
                  outputStream.flush()
                  process.waitFor()
      
                  if (process.exitValue() == 0) {
                      Toast.makeText(this, "התקנה הצליחה", Toast.LENGTH_SHORT).show()
                  } else {
                      Toast.makeText(this, "התקנה נכשלה", Toast.LENGTH_SHORT).show()
                  }
              } catch (e: Exception) {
                  e.printStackTrace()
                  Toast.makeText(this, "שגיאה: ${e.message}", Toast.LENGTH_LONG).show()
              }
          }
      }
      

      מתאם מותאם אישית (Adapter)

      קובץ ApkListAdapter.kt:

      package com.example.apkinstaller
      
      import android.content.Context
      import android.graphics.drawable.Drawable
      import android.view.LayoutInflater
      import android.view.View
      import android.view.ViewGroup
      import android.widget.BaseAdapter
      import android.widget.ImageView
      import android.widget.TextView
      
      class ApkListAdapter(private val context: Context, private val data: List<MainActivity.ApkItem>) : BaseAdapter() {
      
          override fun getCount(): Int = data.size
      
          override fun getItem(position: Int): MainActivity.ApkItem = data[position]
      
          override fun getItemId(position: Int): Long = position.toLong()
      
          override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
              val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)
      
              val iconView: ImageView = view.findViewById(R.id.appIcon)
              val nameView: TextView = view.findViewById(R.id.appName)
      
              val item = getItem(position)
              iconView.setImageDrawable(item.icon ?: context.getDrawable(android.R.drawable.sym_def_app_icon))
              nameView.text = item.name
      
              return view
          }
      }
      

      הערות חשובות

      1. הרשאות רוט:
        ודא שהמכשיר שלך פרוץ (Rooted) ושיש לך גישה להרשאות רוט.
      2. נתיבי קבצים:
        ודא שקבצי ה-APK נמצאים בנתיבים הנכונים שצוינו ברשימה apkFiles.
      3. תמונות ממוזערות:
        הקוד מושך את האייקון של האפליקציה מתוך קובץ ה-APK, במידה וזה אפשרי.
      4. גרסאות אנדרואיד:
        הקוד מותאם לגרסאות 8-10 וייתכן שידרוש התאמות לגרסאות אחרות.

      אם יש לך שאלות נוספות או בעיות בהפעלת הקוד, אשמח לעזור!

      אל תבנה על קוד מלא ש-GPT נתן לך, בדרך כלל צריך עשרות אם לא מאות תיקונים. אני כן מאמין ביכולות שלו, אבל לא עד כדי בניית אפליקציות מורכבות לבד. גם אין כמעט עיצוב...
      בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

      פ תגובה 1 תגובה אחרונה
      3
      • א.מ.ד.א א.מ.ד.

        @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

        אני רוצה לבנות חנות אפליקציות אופליין-שאני יזין את נתיבי קבצי הAPK והחנות תתקין אותם ע"פ בחירה
        כמובן עם הרשאת רוט די שהחנות תתקין בעצמה
        ביקשתי מGPT והביא לי קוד מלא אבל אני פחות יודע איך לקמפל זאת לאפליקצייה באנדרואיד סטודיו
        אשמח אם מישהו יוכל לעזור
        זה הקוד שהוא נתן

        # קוד מלא לאפליקציה להתקנת APK עם הרשאות רוט באנדרואיד (גרסאות 8-10) עם תמונות ממוזערות

        מבנה כללי של האפליקציה

        האפליקציה תציג רשימה של אפליקציות עם תמונות ממוזערות, וכאשר לוחצים על אחת מהן, היא תתקין את קובץ ה-APK באופן עצמאי.

        קובץ AndroidManifest.xml

        הוסף את ההרשאות הבאות כדי לאפשר שימוש בהרשאות רוט והתקנת חבילות:

        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.apkinstaller">
        
            <uses-permission android:name="android.permission.INTERNET" />
            <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        
            <application
                android:allowBackup="true"
                android:label="@string/app_name"
                android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
                <activity android:name=".MainActivity">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.LAUNCHER" />
                    </intent-filter>
                </activity>
            </application>
        
        </manifest>
        

        ממשק משתמש

        קובץ activity_main.xml להצגת הרשימה:

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
        
            <ListView
                android:id="@+id/apkListView"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        
        </LinearLayout>
        

        פריסה מותאמת אישית לפריט ברשימה

        קובץ list_item.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="8dp">
        
            <ImageView
                android:id="@+id/appIcon"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:contentDescription="@string/app_icon" />
        
            <TextView
                android:id="@+id/appName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:textSize="16sp" />
        
        </LinearLayout>
        

        קוד הפעילות הראשית (MainActivity)

        קובץ MainActivity.kt:

        package com.example.apkinstaller
        
        import android.Manifest
        import android.content.pm.PackageManager
        import android.content.pm.PackageManager.NameNotFoundException
        import android.graphics.drawable.Drawable
        import android.os.Bundle
        import android.widget.ListView
        import android.widget.Toast
        import androidx.appcompat.app.AppCompatActivity
        import androidx.core.app.ActivityCompat
        import androidx.core.content.ContextCompat
        
        class MainActivity : AppCompatActivity() {
        
            data class ApkItem(val name: String, val path: String, val icon: Drawable?)
        
            private val apkFiles = listOf(
                ApkItem("First App", "/storage/emulated/0/Download/first_app.apk", null),
                ApkItem("Second App", "/storage/emulated/0/Download/second_app.apk", null),
                ApkItem("Third App", "/storage/emulated/0/Download/third_app.apk", null)
            )
        
            override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)
                setContentView(R.layout.activity_main)
        
                // בדיקת הרשאות לקריאה וכתיבה
                if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 1)
                }
        
                // עדכון הרשימה עם אייקונים
                val apkList = apkFiles.map {
                    val icon = getApkIcon(it.path)
                    ApkItem(it.name, it.path, icon)
                }
        
                val listView: ListView = findViewById(R.id.apkListView)
                val adapter = ApkListAdapter(this, apkList)
                listView.adapter = adapter
        
                listView.setOnItemClickListener { _, _, position, _ ->
                    val apkPath = apkList[position].path
                    installAPK(apkPath)
                }
            }
        
            private fun getApkIcon(apkPath: String): Drawable? {
                val pm = packageManager
                return try {
                    val info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES)
                    info?.applicationInfo?.let {
                        it.sourceDir = apkPath
                        it.publicSourceDir = apkPath
                        pm.getApplicationIcon(it)
                    }
                } catch (e: NameNotFoundException) {
                    null
                }
            }
        
            private fun installAPK(filePath: String) {
                try {
                    val process = Runtime.getRuntime().exec("su")
                    val outputStream = process.outputStream.bufferedWriter()
                    outputStream.write("pm install -r $filePath\n")
                    outputStream.flush()
                    outputStream.write("exit\n")
                    outputStream.flush()
                    process.waitFor()
        
                    if (process.exitValue() == 0) {
                        Toast.makeText(this, "התקנה הצליחה", Toast.LENGTH_SHORT).show()
                    } else {
                        Toast.makeText(this, "התקנה נכשלה", Toast.LENGTH_SHORT).show()
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                    Toast.makeText(this, "שגיאה: ${e.message}", Toast.LENGTH_LONG).show()
                }
            }
        }
        

        מתאם מותאם אישית (Adapter)

        קובץ ApkListAdapter.kt:

        package com.example.apkinstaller
        
        import android.content.Context
        import android.graphics.drawable.Drawable
        import android.view.LayoutInflater
        import android.view.View
        import android.view.ViewGroup
        import android.widget.BaseAdapter
        import android.widget.ImageView
        import android.widget.TextView
        
        class ApkListAdapter(private val context: Context, private val data: List<MainActivity.ApkItem>) : BaseAdapter() {
        
            override fun getCount(): Int = data.size
        
            override fun getItem(position: Int): MainActivity.ApkItem = data[position]
        
            override fun getItemId(position: Int): Long = position.toLong()
        
            override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
                val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)
        
                val iconView: ImageView = view.findViewById(R.id.appIcon)
                val nameView: TextView = view.findViewById(R.id.appName)
        
                val item = getItem(position)
                iconView.setImageDrawable(item.icon ?: context.getDrawable(android.R.drawable.sym_def_app_icon))
                nameView.text = item.name
        
                return view
            }
        }
        

        הערות חשובות

        1. הרשאות רוט:
          ודא שהמכשיר שלך פרוץ (Rooted) ושיש לך גישה להרשאות רוט.
        2. נתיבי קבצים:
          ודא שקבצי ה-APK נמצאים בנתיבים הנכונים שצוינו ברשימה apkFiles.
        3. תמונות ממוזערות:
          הקוד מושך את האייקון של האפליקציה מתוך קובץ ה-APK, במידה וזה אפשרי.
        4. גרסאות אנדרואיד:
          הקוד מותאם לגרסאות 8-10 וייתכן שידרוש התאמות לגרסאות אחרות.

        אם יש לך שאלות נוספות או בעיות בהפעלת הקוד, אשמח לעזור!

        אל תבנה על קוד מלא ש-GPT נתן לך, בדרך כלל צריך עשרות אם לא מאות תיקונים. אני כן מאמין ביכולות שלו, אבל לא עד כדי בניית אפליקציות מורכבות לבד. גם אין כמעט עיצוב...
        בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

        פ מנותק
        פ מנותק
        פראירי
        מורחק
        כתב נערך לאחרונה על ידי
        #3

        @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

        בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

        אשמח ביותר!

        א.מ.ד.א תגובה 1 תגובה אחרונה
        0
        • פ פראירי

          @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

          בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

          אשמח ביותר!

          א.מ.ד.א מנותק
          א.מ.ד.א מנותק
          א.מ.ד.
          כתב נערך לאחרונה על ידי
          #4

          @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

          @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

          בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

          אשמח ביותר!

          תפרט מה אתה רוצה בדיוק.

          פ תגובה 1 תגובה אחרונה
          1
          • א.מ.ד.א א.מ.ד.

            @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

            @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

            בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

            אשמח ביותר!

            תפרט מה אתה רוצה בדיוק.

            פ מנותק
            פ מנותק
            פראירי
            מורחק
            כתב נערך לאחרונה על ידי
            #5

            @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

            @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

            @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

            בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

            אשמח ביותר!

            תפרט מה אתה רוצה בדיוק.

            ליצור אפליקציה שיהיה לה מתקין חבילות עצמאי עם רוט ולא באמצעות מתקין החבילה
            והאפליקציה יהיה לה תקייה בAPP או בDATA עם קבצי APK והאפליקציה תציג סמליל של התוכנות ויהיה אפשרות בבחירה על אחת התוכנות להתקין אותה
            זה הכל בגדול..

            א.מ.ד.א איש אמתא 2 תגובות תגובה אחרונה
            1
            • פ פראירי

              @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

              @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

              @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

              בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

              אשמח ביותר!

              תפרט מה אתה רוצה בדיוק.

              ליצור אפליקציה שיהיה לה מתקין חבילות עצמאי עם רוט ולא באמצעות מתקין החבילה
              והאפליקציה יהיה לה תקייה בAPP או בDATA עם קבצי APK והאפליקציה תציג סמליל של התוכנות ויהיה אפשרות בבחירה על אחת התוכנות להתקין אותה
              זה הכל בגדול..

              א.מ.ד.א מנותק
              א.מ.ד.א מנותק
              א.מ.ד.
              כתב נערך לאחרונה על ידי
              #6

              @פראירי להשאיר לך להכניס את הקבצים?

              פ תגובה 1 תגובה אחרונה
              1
              • א.מ.ד.א א.מ.ד.

                @פראירי להשאיר לך להכניס את הקבצים?

                פ מנותק
                פ מנותק
                פראירי
                מורחק
                כתב נערך לאחרונה על ידי
                #7

                @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                @פראירי להשאיר לך להכניס את הקבצים?

                כן

                תגובה 1 תגובה אחרונה
                1
                • פ פראירי

                  @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                  @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                  @א-מ-ד כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                  בכל אופן אם זה דחוף לך אני יכול לבנות לך משהו בסיסי.

                  אשמח ביותר!

                  תפרט מה אתה רוצה בדיוק.

                  ליצור אפליקציה שיהיה לה מתקין חבילות עצמאי עם רוט ולא באמצעות מתקין החבילה
                  והאפליקציה יהיה לה תקייה בAPP או בDATA עם קבצי APK והאפליקציה תציג סמליל של התוכנות ויהיה אפשרות בבחירה על אחת התוכנות להתקין אותה
                  זה הכל בגדול..

                  איש אמתא מנותק
                  איש אמתא מנותק
                  איש אמת
                  מדריכים
                  כתב נערך לאחרונה על ידי
                  #8

                  @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                  ליצור אפליקציה שיהיה לה מתקין חבילות עצמאי עם רוט ולא באמצעות מתקין החבילה

                  קצת ניסוח לא תקין כי לבנות אפליקציה שמסוגלת להתקין לבד זה דבר אחד ואפליקציה שמשתמשת ב shell זה דבר שני
                  לבנות אפליקציה שמתקינה דרך shell ברמת העיקרון זה קל
                  אך לבנות אפליקציה שמתקינה כמו גוגל פליי זה קצת יותר מסובך

                  אני יודע שאני חושב שאני יודע.

                  פ תגובה 1 תגובה אחרונה
                  0
                  • איש אמתא איש אמת

                    @פראירי כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                    ליצור אפליקציה שיהיה לה מתקין חבילות עצמאי עם רוט ולא באמצעות מתקין החבילה

                    קצת ניסוח לא תקין כי לבנות אפליקציה שמסוגלת להתקין לבד זה דבר אחד ואפליקציה שמשתמשת ב shell זה דבר שני
                    לבנות אפליקציה שמתקינה דרך shell ברמת העיקרון זה קל
                    אך לבנות אפליקציה שמתקינה כמו גוגל פליי זה קצת יותר מסובך

                    פ מנותק
                    פ מנותק
                    פראירי
                    מורחק
                    כתב נערך לאחרונה על ידי
                    #9

                    @איש-אמת כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                    אך לבנות אפליקציה שמתקינה כמו גוגל פליי זה קצת יותר מסובך

                    מי אמר שאני צריך כמו גוגל פליי?
                    אני צריך רק את זה
                    @איש-אמת כתב בבקשת מידע | בניית חנות אפליקציות אופליין:

                    לבנות אפליקציה שמתקינה דרך shell ברמת העיקרון זה קל

                    תגובה 1 תגובה אחרונה
                    0
                    • ל מנותק
                      ל מנותק
                      למה באתי
                      מדריכים
                      כתב נערך לאחרונה על ידי
                      #10

                      יש תוצאה?

                      תגובה 1 תגובה אחרונה
                      0

                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • חוקי הפורום
                      • פופולרי
                      • לא נפתר
                      • משתמשים
                      • חיפוש גוגל בפורום
                      • צור קשר